您的位置:首页 > 编程语言 > Java开发

算法学习之快速排序(java)

2014-10-15 17:09 141 查看
快速排序(Quicksort)的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

快速排序相对还是比较好理解的,上代码:

/**
* 递归方式实现快速排序
* 递归算法容易出现 stackoverflow,所以要谨慎做判断。
* @param src
* @param s
* @param e
*/
public static void quickSort1(int src[],int s,int e){
if(src==null||src.length<2){
return;
}
if(s>=e){//防止递归无限调用。
return;
}
if(s>src.length-1){//防止数组越界
return;
}
int key=src[s];
int i=s,j=e;
while(i<j){
while(i<j&&src[j]>key){
j--;
}
if(i<j){
src[i]=src[j];
i++;//src[i]置换之后,i向后移动一位,不移位也不会出错
}
while(i<j&&src[i]<=key){
i++;
}
if(i<j){
src[j]=src[i];
j--;//src[j]置换之后,j向前移动一位,不移位也不会出错
}
}
src[i]=key;
quickSort1(src,s,i-1);
quickSort1(src,i+1,e);
}


使用10万随机数据测试:

开始排序...

排序时间是10毫秒

11,30,36,36,55,96,99,100,117,120,123,138,144,148,158,172,194,222,224,225,……,999968,999974,999995

在数据量比较大的时候试试快速排序吧。

几个理解起来相对简单的排序学习完毕了,下面去努力学习堆排序了……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: