1.选择排序
public class Main {
public static void main(String[] args) {
int []arr={1,5,3,4,2};
for(int i=0;i<4;i++){
int index=i;
for (int j = i+1; j <5 ; j++) {
index=arr[j]>arr[index]?index:j;
swap(arr,i,index);
}
}
for(int x:arr){
System.out.println(x);
}
}
public static void swap(int arr[],int a,int b){
int tmp=arr[a];
arr[a]=arr[b];
arr[b]=tmp;
}
}
2.冒泡排序
public class Main {
public static void main(String[] args) {
int []arr={1,5,3,4,2};
for (int i = 4; i >0 ; i--) {
for (int j = 0; j <i ; j++) {
if (arr[j]>arr[j+1])
swap(arr,j,j+1);
}
}
for(int x:arr){
System.out.println(x);
}
}
public static void swap(int arr[],int a,int b){
if(arr[b]==arr[a])
return;
arr[a]=arr[a]^arr[b];
arr[b]=arr[a]^arr[b];
arr[a]=arr[a]^arr[b];
}
}
3.提取一个数最右边的1
int rightOne = eor & (~eor+1);
4.插入排序
public class Main {
public static void main(String[] args) {
int []arr={1,5,9,5,6,4,7,8,5,3};
for (int i = 1; i <arr.length ; i++) {
for (int j = i-1; j>=0 && arr[j+1]<arr[j]; j--) {
swap(arr,j+1,j);
}
}
for(int x:arr){
System.out.println(x);
}
}
public static void swap(int arr[],int a,int b){
if(b==a)
return;
arr[a]=arr[a]^arr[b];
arr[b]=arr[a]^arr[b];
arr[a]=arr[a]^arr[b];
}
}
5.对数器
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int testTime=500000;
int maxSize=100;
int maxValue=100;
boolean succed=true;
for (int i = 0; i <testTime ; i++) {
int arr1[]=Randomlygeneratednumber(maxSize,maxValue);
int arr2[]=copy(arr1,arr1.length);
MethodOne(arr1);
MethodTow(arr2);
if(!isEqual(arr1,arr2)){
succed=false;
break;
}
}
}
public static int[] Randomlygeneratednumber(int maxSize,int maxValue){
int arr[]=new int[(int)((maxSize+1)*Math.random())];
for (int i = 0; i <arr.length ; i++) {
arr[i]=(int)((maxValue+1)*(Math.random()))-(int)((maxValue)*(Math.random()));
}
return arr;
}
public static int [] cope(int arr[],int length){
return Arrays.copyOf(arr,length);
}
}
6.提取数组中间数
public class Main {
public static void main(String[] args) {
int arr[]={1,2,3,4,5,6,7,8,9,10,11,12};
int L=0;
int R=arr.length;
int k=L+(R-L)>>1;
System.out.println(k);
}
}
7.master公式(递归时间复杂度)

8.归并排序(二分)
public class Main {
public static void main(String[] args) {
int arr[]={6,5,6,15,8,63,12,102,4,5,1,0,1,23,2,1,69};
process(arr,0,arr.length-1);
for(int x:arr)
System.out.println(x);
}
public static void process(int arr[],int L,int R){
if(L==R) return;
int mind =L+((R-L)>>1);
process(arr,L,mind);
process(arr,mind+1,R);
merge(arr,L,mind,R);
}
public static void merge(int arr[],int L,int mind,int R){
int [] help=new int[R-L+1];
int p1=L;
int p2=mind+1;
int i=0;
while(p1<=mind && p2<=R){
help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];
}
while(p1<=mind)
help[i++]=arr[p1++];
while(p2<=R)
help[i++]=arr[p2++];
for (int j = 0; j <help.length ; j++) {
arr[L+j]=help[j];
}
}
}
9.快速排序
public class Main {
public static void main(String[] args) {
int arr[]={6,5,6,15,8,63,12,102,4,5,1,0,1,23,2,1,69};
quickSort(arr,0,arr.length-1);
for(int x:arr)
System.out.println(x);
}
public static void quickSort(int arr[],int L,int R){
if(L<R){
swap(arr,L+(int)(Math.random()*(R-L+1)),R);
int [] p=partition(arr,L,R);
quickSort(arr,L,p[0]-1);
quickSort(arr,p[1],R);
}
}
public static int[] partition(int arr[],int L,int R){
int less=L-1;
int more=R;
while(L < more){
if(arr[L]<arr[R])
swap(arr,++less,L++);
}else if (arr[L]>arr[R]){
swap(arr,--more,L);
}else{
L++;
}
}
swap(arr,more,R);
return new int[]{
less+1,more
};
}
public static void swap(int arr[],int a,int b){
if(a==b) return;
arr[a]^=arr[b];
arr[b]^=arr[a];
arr[a]^=arr[b];
}
}