快速排序优化
来源:互联网 发布:123软件是什么 编辑:程序博客网 时间:2024/05/16 04:47
当输入数据基本有序时,插入排序的速度很快。因此我们可以利用这一点来提高快速排序的的速度。当对一个小于k的子数组数组调用快速排序时,让他不做任何排序就返回。当上层的快速排序调用返回后,对整个数组运行插入排序来完成排序过程。因此我们在快速排序基础上加上一个插入排序,并且在快速排序中修改当子数组长度小于k时调用插入排序。
对k取不同时间测运行时间
package test;import java.util.Random;public class QuickSort {public int partition(int[] A, int p, int r) {int x = A[r];int i =p-1;for(int j = p; j < r; j++){if(A[j]<=x){i = i+1;swap(A,i,j);}}swap(A,i+1,r);return i+1;}public void InsertionSort(int[] A,int p,int r){int key;int i,j;for( j =p+1; j<=r; j++){key = A[j];i=j-1;while(i>=0 && A[i]>key){A[i+1]=A[i];i=i-1;}A[i+1] = key;}}public void quicksort(int[] A,int p,int r, int k){int q=0; if(p>=r) { return; } if(r-p+1<k) { InsertionSort(A,p,r); } else { q=partition(A,p,r); quicksort(A,p,q-1,k); quicksort(A,q+1,r,k); } }public void swap(int [] arr,int x ,int y){int temp=arr[x];arr[x]=arr[y];arr[y]=temp;}}
package test;public class Test {/** * @param args */private static int BUFFER_SIZE = 1000000;public static void main(String[] args) {// TODO Auto-generated method stubint[] arr = new int[BUFFER_SIZE];int[] brr = new int[BUFFER_SIZE];for(int i = 0; i< arr.length;i++){arr[i] =(int) (Math.random()*1000000+1);}for(int k = 0;k<=100;k++){brr=arr.clone();QuickSort qs = new QuickSort();long time1 = System.currentTimeMillis();qs.quicksort(brr, 0, brr.length-1,k);long time2 = System.currentTimeMillis();if(k%4==0)System.out.println(); System.out.print("k = "+k+"运行时间:");System.out.print(time2-time1+"ms"+" ");}}}
- 快速排序及其优化
- 快速排序及优化
- 快速排序及其优化
- 优化 快速排序
- 快速排序(优化版)
- 快速排序及优化
- 快速排序的优化
- 快速排序的优化
- 快速排序<优化>
- 随机优化快速排序
- 快速排序优化
- 优化的快速排序
- 快速排序及优化
- 快速排序优化
- 快速排序及优化
- 快速排序优化分析
- 快速排序的优化
- 快速排序及优化
- Java转义字符对照表
- oracle 生成流水号
- PackageManagerService(四):上层调用
- C++ 存储多种类型的结构
- php 断点调试工具配置之二
- 快速排序优化
- 美剧中的英文粗语脏话知多少?
- 破解中国电信赠送华为无线猫路由(HG522-C)
- 运行时异常与一般异常有何异同?
- git diff:对比working tree、stage、commit文件之间的不同
- SeekBar 设置
- Ural 1260. Nudnik Photographer
- OCP-1Z0-053-V12.02-240题
- ubuntu12.04下php扩展mysql