【发布时间】:2014-02-08 18:19:47
【问题描述】:
我写了这个快速排序算法的实现。 从理论上讲,快速排序应该使用任何枢轴工作,但我的代码无法正确排序数组。
如果我使用 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;
}
【问题讨论】:
-
我们无法告诉您未向我们展示的实现有什么问题。您必须向我们展示工作和非工作版本,然后我们才能确定您做错了什么。
-
@RBarryYoung 我试图改写我的问题,但我输入了错误的代码
标签: algorithm sorting quicksort