Quicksort:算法仅适用于特定的数据透视

时间:2014-02-08 18:19:47

标签: algorithm sorting quicksort

我写了这个快速排序算法的实现。 理论上,快速排序应该使用任何数据透视表,但我的代码无法正确排序数组。

如果我使用l作为枢轴,算法可以工作,但我无法理解为什么它不能用h工作。有什么想法吗?

public ArrayList<Integer> sort(ArrayList<Integer> array, int l, int h){
    if ((h - l) > 0){
        int splitPoint = partition(array, l, h);
        sort(array, l, splitPoint);
        sort(array, splitPoint +1, h);
    }
    return array;
}

public int partition(ArrayList<Integer> array, int l, int h) {
    int p = h; //with int p = l; the algorithm works
    Integer pivot = array.get(p);

    while(l<h) {
        for (; h>l && array.get(h).compareTo(pivot) >= 0; h--);
        for (; l<h && array.get(l).compareTo(pivot) < 0; l++);

        swap(array, l, h);
    }
    return h;
}

1 个答案:

答案 0 :(得分:0)

您可以使用现有算法。

如果您想选择其他支点,请将其换为partition中的第一个位置。