简单排序Java实现(三):希尔排序,堆排序

来源:互联网 发布:学生护手霜推荐 知乎 编辑:程序博客网 时间:2024/05/22 06:14

希尔排序平均时间复杂度:O(nlogn),最好时间复杂度:O(n)

堆排序的最好和平均时间复杂度都为:O(nlogn);



public class sortTest {public static void main(String[] args) {// TODO Auto-generated method stubint i =0;int [] a={5,4,3,8,7};System.out.println("================归并排序===========================");int len =a.length;MergeSort(a,0,len-1);printA(a);System.out.println("================快速排序===========================");quickSort(a);printA(a);System.out.println("================希尔排序===========================");shellSort(a);printA(a);System.out.println("================小顶堆排序===========================");myMinHeapSort(a);printA(a);}private static void myMinHeapSort(int[] a) {// TODO Auto-generated method stubint len=a.length;for (int i = len/2; i>=0; i--) {adjustMinHeap(a,i,len-1);}for(int i=len-1;i>=0;i--){int tmp=a[0];a[0]=a[i];a[i]=tmp;adjustMinHeap(a, 0, i-1);}}private static void adjustMinHeap(int[] a, int i, int len) {// TODO Auto-generated method stubint tmp;int child=0;for(tmp=a[i];2*i+1<=len;i=child){child=2*i+1;if(child<len && a[child]>a[child+1]){child++;}if(a[child]<tmp){a[i]=a[child];}else{break;}}a[i]=tmp;}private static void printA(int[] a) {for (int j = 0; j < a.length; j++) {System.out.print(a[j]+" ");}System.out.println();}private static void shellSort(int[] a) {// TODO Auto-generated method stubint len=a.length;int i,j,h,tmp;for(h=len/2;h>0;h=h/2){for(i=h;i<len;i++){tmp=a[i];for(j=i-h;j>=0;j-=h){if(tmp<a[j]){a[j+h]=a[j];}else{break;}}a[j+h]=tmp;}}}//快速排序private static void quickSort(int[] a) {// TODO Auto-generated method stubsort(a,0,a.length-1);}private static void sort(int[] a, int low, int high) {// TODO Auto-generated method stubint i,j;int index;if(low>=high){return;}i=low;j=high;index=a[i];while(i<j){while(i<j && a[j]>=index){j--;}if(i<j){a[i++]=a[j];}while(i<j && a[i]<index){i++;}if(i<j){a[j--]=a[i];}}a[i]=index;sort(a,low,i-1);sort(a,i+1,high);}//归并排序private static void MergeSort(int[] a, int p, int r) {// TODO Auto-generated method stubif(p<r){int q=(p+r)/2;MergeSort(a,p,q);MergeSort(a,q+1,r);Merge(a,p,q,r);}}private static void Merge(int[] a, int p, int q, int r) {// TODO Auto-generated method stubint i,j,k,n1,n2;n1=q-p+1;n2=r-q;int[] L=new int[n1];int[] R=new int[n2];for (i = 0,k=p; i <n1; i++,k++) {L[i]=a[k];}for (i = 0,k=q+1; i <n2; i++,k++) {R[i]=a[k];}for(i=0,j=0,k=p;i<n1 && j<n2;k++){if(L[i]<R[j]){a[k]=L[i];i++;}else{a[k]=R[j];j++;}}if(i<n1){for(j=i;j<n1;j++,k++){a[k]=L[j];}}if(j<n2){for(i=j;i<n2;i++,k++){a[k]=R[i];}}}}


阅读全文
1 0