混合排序=快速排序+冒泡排序。排序速度也很快。

来源:互联网 发布:什么是无约束优化问题 编辑:程序博客网 时间:2024/06/13 21:34
package testway;import java.util.Arrays;public class paixu {public static int[] besort(int[] arr){int max=arr.length-1;work(arr,0,max);return arr;}/** * 快速排序法 * @param arr     排序数组 * @param minIndex    开始下标 * @param maxIndex    结束下标 */public static  void work(int[] arr,int minIndex,int maxIndex){//假设第一个为key;int key=arr[minIndex];int i=minIndex;int j=maxIndex;do{while(arr[j]>=key&&j>i){j--;}while(arr[i]<=key&&j>i){i++;}//位置替换int b=arr[j];arr[j]=arr[i];arr[i]=b;}while(i!=j);//以i为分界点。arr[minIndex]=arr[j];arr[i]=key;//System.out.println("i="+i+",min="+minIndex+",max="+maxIndex);//System.out.println(key);//如果未排序部分的的个数大于8,采用快速排序,否则采用冒泡。if(i-minIndex>8){work(arr,minIndex,i-1);}else{work2(arr,minIndex,i-1);}if(maxIndex-i>8){work(arr,i+1,maxIndex);}else{work2(arr,i+1,maxIndex);}}/** * 冒泡排序 * @param arr     排序数组 * @param minIndex    开始下标 * @param maxIndex    结束下标 */public static void work2(int[] arr,int minIndex,int maxIndex){//System.out.println("冒泡min="+minIndex+",max="+maxIndex);//System.out.println(Arrays.toString(arr));boolean flag=true;//元素是否交换标记int temp=0;int t=0;for(int i=minIndex;i<maxIndex;i++){flag=true;for(int j=minIndex;j<maxIndex-t;j++){//System.out.println(arr[j]+":"+arr[j+1]);if(arr[j]>arr[j+1]){//System.out.println("--------------");temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;flag=false;}}if(flag){break;}t++;}//System.out.println(Arrays.toString(arr));}/** * 测试时间。 * @param args */public static void main(String[] args){int k=1200;int[] a =new int[k];int[] b =new int[k];for(int i=0;i<a.length;i++){int j=(int)(Math.random()*20000);a[i]=j;b[i]=j; }long t1=System.nanoTime();Arrays.sort(a);System.out.println(Arrays.toString(a));System.out.println("系统时间"+(System.nanoTime()-t1));long t2=System.nanoTime();besort(b);System.out.println(Arrays.toString(b));System.out.println("我的时间"+(System.nanoTime()-t2));}}

原创粉丝点击