快速排序不工作當我測試我的快速排序我注意到另一個問題。有時它按字母順序排列數組,有時它不會。例如,如果我有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將遞增。樞軸應保持在其位置。 –
正確。但我不移動關鍵點,我只是重新排列這些值。奇怪的是它在除了這個之外的其他所有情況下都有效。 –