基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,以此达到整个数据变成有序序列。
public static Comparable[] a = new Comparable[] {1,9,2,8,3,0,5,7};
public static void main(String[] args) {
qSort(0,a.length-1);
}
private static void qSort(int p,int r) {
if(p < r) {
int q = partition(p,r);
qSort(p,q-1);//对左半段排序
qSort(q+1,r);//对右半段排序
}
}
private static int partition(int p, int r) {
int i = p, j = r + 1;
Comparable x = a[p];
//将<x的元素交换到左边区域
//将>x的元素交换到左边区域
while(true) {
while(a[++i].compareTo(x)<0 && i<r);
while(a[--j].compareTo(x)>0);
if(i>=j) break;
swap(a,i,j);
System.out.println("i<j*****************");
for(int k=0;k<a.length;k++) {
System.out.print(a[k]+" ");
}
System.out.println();
}
a[p] = a[j];
a[j] = x;
System.out.println("i>=j****************");
for(int k=0;k<a.length;k++) {
System.out.print(a[k]+" ");
}
System.out.println();
return j;
}
private static void swap(Comparable[] a2, int i, int j) {
Comparable temp = a2[i];
a2[i] = a2[j];
a2[j] = temp;
}
先序遍历(根左右遍历)