优点:三向切分的快速排序比归并排序、标准快速排序和其他排序方法在包括重复元素很多的实际应用中更快。
public static void quickThreeWaySort(double[] A){quickThreeWay(A, 0, A.length- 1);}private static void quickThreeWay(double[] A, int lo, int hi){if(lo >= hi){//同上return;}double pivot = A[lo];int lt = lo; //小于pivot的指针int i = lo + 1; //等于pivot的指针int gt = hi; //大于pivot的指针while(i <= gt){int cmp = compareTo(A[i], pivot);if(cmp < 0){exchange(A, i++, lt++);}else if(cmp > 0){exchange(A, i, gt--);}else{i++;}}//跳出while循环后//A[lo, lt-1] < pivot=A[lt, gt] < A[gt+1, hi]成立quickThreeWay(A, lo, lt- 1);quickThreeWay(A, gt+ 1, hi);}public static void quickSort(double[] A){quickSortAPI(A, 0, A.length- 1);}private static void quickSortAPI(double[] A, int lo, int hi){if(lo >= hi){//这里可以使用插入排序,降低递归带来的效率下降//判断条件应该是 lo + x >= hireturn;}int pivot = partition(A, lo, hi);quickSortAPI(A, lo, pivot- 1);quickSortAPI(A, pivot+ 1, hi);}