我写了这个快速排序算法的实现。 理论上,快速排序应该使用任何数据透视表,但我的代码无法正确排序数组。
如果我使用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;
}
答案 0 :(得分:0)
您可以使用现有算法。
如果您想选择其他支点,请将其换为partition
中的第一个位置。