快速排序

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);
}
comments powered by Disqus 18 Jun 2013 | 算法