百科:
快速排序(Quicksort)是对冒泡排序的一种改进。
快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
java实现:
package sort.fast;
/**
* 快速排序
* @author jiajiajia
*
*/
public class Fast {
public static int a[],step=0,s=0;
/**
* 递归函数
* @param left 数组左区间开始
* @param right 数组右区间结束
*/
public static void quicksort(int left, int right) {
int i, j,temp;
if(left > right)
return;
temp = a[left]; //temp中存的就是基准数
i = left;
j = right;
while(i != j){ //两探针没有碰头
while(a[j] >= temp && i < j)//顺序很重要,要先从右边开始找
j--;
while(a[i] <= temp && i < j)//再找右边的
i++;
if(i < j){ //交换两个数在数组中的位置
a[i] = a[i]+a[j];
a[j] = a[i]-a[j];
a[i] = a[i]-a[j];
}
}
//最终将基准数归位
a[left] = a[i];
a[i] = temp;
s++;
if(s>step) {//计算递归深度
step=s;
}
quicksort(left, i-1);//继续递归处理左区间数据
quicksort(i+1, right);//继续递归处理右区间数据
s--;
}
public static void main(String[] args) {
a= new int[]{4,5,6,1,2,3,7,8,9,0};
quicksort(0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.print(a[i] + " ");
System.out.println();
System.out.println("递归深度:"+step);
}
}