我为Quicksort实现了经典的Hoare分区算法.它适用于任何唯一数字列表[3,5,231,43].唯一的问题是当我有一个重复的列表[1,57,1,34].如果我得到重复值,我进入一个无限循环.
private void quicksort(int[]a, int lo, int hi) {
if (lo < hi) {
int q = hoare_partition(a, lo, hi);
quicksort(a, lo, q - 1);
quicksort(a, q + 1, hi);
}
}
private int hoare_partition(int[] a, int lo, int hi) {
int pivot = a[hi];
int i = lo;
int j = hi;
while (true) {
while (a[i] < pivot) i++;
while (a[j] > pivot) j--;
if (i < j) swap(a, i, j);
else return j;
}
}
Run Code Online (Sandbox Code Playgroud)
Hoare的实现是否可能不正确并且无法应对重复?
我知道这已被多次询问(我尝试了所有这些)但我很难找到这个实现的解决方案.