排序算法
冒泡排序
public int[] mergeSort(int[] array){ int n=array.length; for(int i=0;i<n;++i){ for(int j=n-1;j>i;--j){ if(array[j]<array[j-1]){ array[j]^=array[j-1]; array[j-1]^=array[j]; array[j]^=array[j-1]; } } } return array; }
选择排序
public int[] selectSort(int[] array){ int n=array.length; for(int i=0;i<n;++i){ int index=i; for(int j=i+1;j<n;++j){ if(array[j]<array[index]){ index=j; } } int tmp=array[index]; array[index]=array[i]; array[i]=tmp; } return array; }
插入排序
public int[] insertSort(int [] array){ int n=array.length; for(int i=1;i<n;++i){ int j=i-1; int tmp=array[i]; while(j>=0&&array[j]>tmp){ array[j+1]=array[j]; j--; } array[j+1]=tmp; } return array; }
快速排序
public int[] quickSort(int [] array,int start ,int end) { if(start<end){ int part=partition(array,start,end); quickSort(array,start,part-1); quickSort(array,part+1,end); } return array; } public int partition(int array[],int i,int j){ int pivot=i; int index=i+1; for(int s=index;s<=j;++s){ if(array[s]<array[pivot]) { swap(array,index,s); index++; } } swap(array,index-1,pivot); return index-1; } public void swap(int array[],int i,int j){ int tmp=array[i]; array[i]=array[j]; array[j]=tmp; }
堆排序
计数排序
归并排序
public int[] split(int[] array){ if(array.length<2) return array; int middle=array.length/2; int[] left= Arrays.copyOfRange(array,0,middle); int[] right=Arrays.copyOfRange(array,middle,array.length); return union(split(left),split(right)); } public int[] union(int[] left,int right[]){ int n=left.length+right.length; int[] array=new int[n]; int i=0,j=0,k=0; for(;k<n&&i<left.length&&j<right.length;++k){ if(left[i]<right[j]){ array[k]=left[i++]; }else{ array[k]=right[j++]; } } if(i==left.length){ while(j<right.length){ array[k++]=right[j++]; } } if(j==right.length){ while(i<left.length){ array[k++]=left[i++]; } } return array; }
希尔排序