快速排序不工作当我测试我的快速排序我注意到另一个问题。有时它按字母顺序排列数组,有时它不会。例如,如果我有p, o, j, l
作为我的阵列,它将它排序为j, o, l, p
,这是错误的,因为l
应该在o
之前。但是,如果我将a
添加到阵列,它排序为a, j, l, o, p
这是正确的。这是为什么发生?在某些情况下
代码:
private ArrayList<String> sort(ArrayList<String> ar, int lo, int hi){
if (lo < hi){
int splitPoint = partition(ar, lo, hi);
sort(ar, lo, splitPoint);
sort(ar, splitPoint +1, hi);
}
return ar;
}
private int partition(ArrayList<String> ar, int lo, int hi){
String pivot = ar.get(lo);
lo--;
hi++;
while (true){
lo++;
hi--;
while (lo<hi && ar.get(lo).compareTo(pivot) < 0){
lo++;
}
while (hi>lo && ar.get(hi).compareTo(pivot) >= 0){
hi--;
}
if (lo<hi){
swap(ar, lo, hi);
}else {
return hi;
}
}
}
private ArrayList<String> swap(ArrayList<String> ar, int a, int b){
String temp = ar.get(a);
ar.set(a, ar.get(b));
ar.set(b, temp);
return ar;
}
我一直比较和交换,而'LO
据我了解,最初lo == pivot。因此,arr [lo]与arr [pivot]的第一次比较应为零,并且lo将递增。枢轴应保持在其位置。 –
正确。但我不移动关键点,我只是重新排列这些值。奇怪的是它在除了这个之外的其他所有情况下都有效。 –