快速排序
1,基础快速排序算法
详细代码参见QuickSort.java
public static void sort(Comparable[] a) {
sort(a, 0, a.length-1);
}
private static void sort(Comparable[] a, int lo, int hi) {
if( hi <= lo ) return;
int j = partition(a, lo, hi);
sort(a, lo, j-1);
sort(a, j + 1, hi);
}
private static int partition(Comparable[] a, int lo, int hi) {
int i = lo, j = hi + 1;
Comparable v = a[lo];
while(true){
while(SortExample.less(a[++i], v)) if( i == hi) break;
while(SortExample.less(v, a[--j])) if( j == lo) break;
if( i >= j) break;
SortExample.exch(a, i, j);
}
SortExample.exch(a, lo, j);
return j;
}
2,三向切分快速排序算法(熵最优)
详细代码参见Quick3Sort.java
public static void sort(Comparable[] a) {
sort(a, 0, a.length-1);
}
private static void sort(Comparable[] a, int lo, int hi) {
if(hi <= lo) return;
int lt = lo, i = lo + 1, gt = hi;
Comparable v = a[lo];
while(i <= gt){
int comp = a[i].compareTo(v);
if ( comp < 0) SortExample.exch(a, lt++, i++);
else if( comp > 0) SortExample.exch(a, i, gt--);
else i++;
}
sort(a, lo, lt-1);
sort(a, gt + 1, hi);
}