基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程递归进行,以此达到整个数据变成有序序列。
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; }先序遍历(根左右遍历)