一、交换排序
1. 冒泡排序法
public static void bubbleSort(Object a[],int n) { if(n>a.length){ System.out.printf("êènóDó£í£13ìDò£"); System.exit(1); } for(int i=1;i<n;i++) { boolean flag=false; for(int j=n-1;j>=i;j--) { if(((Comparable)a[j]).compareTo(a[j-1])<0){ Object x=a[j]; a[j]=a[j-1]; a[j-1]=x; flag=true; } } if(flag==false) return; } }
2. 快速排序法
public static int partition(Object a[],int s,int t) { int i=s,j=t; Object x=a[i++]; while(i<=j){ while(i<=j&&((Comparable)a[i]).compareTo(x)<=0) i++; while(i<=j&&((Comparable)a[j]).compareTo(x)>=0) j--; if(i<j){ Object temp=a[i]; a[i]=a[j]; a[j]=temp; i++; j--; } } a[s]=a[j];a[j]=x; return j; } public static void quickRecursion(Object a[],int s,int t) { int j=partition(a,s,t); if(s<j-1) quickRecursion(a,s,j-1); if(j+1<t) quickRecursion(a,j+1,t); } public static void quickSort(Object a[],int n) { if(n>a.length) {System.out.println("nμóDó£í£1DD£"); system.exit(1);} quickRecursion(a,0,n-1); }
二、 插入排序法
public static void insertSort(Object[] a,int n) { if(n>a.length) { System.out.println("n值有误,停止执行!"); System.exit(1); } for(int i=1;i<n;i++) { Object x=a[i]; int j; for(j=i-1;j>=0;j--) { if(((Comparable)x).compareTo(a[j])<0) a[j+1]=a[j]; else break; } a[j+1]=x; } }
三、选择排序
public static void selectSort(Object []a,int n) { if(n>a.length) { System.out.println("n值有误,停止执行!"); System.exit(1); } for(int i=1;i<=n-1;i++) { int k=i-1; for(int j=i;j<=n-1;j++) { if(((Comparable)a[j]).compareTo(a[k])<0) k=j; } if(k!=i-1) { Object x=a[i-1]; a[i-1]=a[k]; a[k]=x; } } }
四、归并排序
public static void twoMerge(Object []a,Object []r,int s,int m,int t) { int i,j,l; i=s;j=m+1;k=s; while(i<m&&j<=t) { if(((Comparable)a[i]).compareTo(a[j])<=0) { r[k]=a[i];i++;k++; } else { r[k]=a[j];j++;k++; } } while(i<=m) { r[k]=a[i];i++;k++; } while(j<=t) { r[k]=a[j]; j++;k++; } } public static void mergePass(Object []a,Objcet []r,int n,int len) { int p=0; while(p+2*len-1<n-1) { twoMerge(a,r,p,p+len-1,p+2*len-1); p+=2*len; } if(p+len-1<n-1) twoMerge(a,r,p,p+len-1,n-1); else for(int i=p;i<=n-1;i++) r[i]=a[i]; } public static void mergeSort(Object []a,int n) { Object []r=new Object[n]; int len=1; while(len<n) { mergePass(a,r,n,len); len*=2; mergePass(r,a,n,len); len*=2; } }