小编Val*_*i_K的帖子

Quicksort - Hoare使用重复值进行分区

我为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的实现是否可能不正确并且无法应对重复?

我知道这已被多次询问(我尝试了所有这些)但我很难找到这个实现的解决方案.

sorting algorithm partitioning quicksort

3
推荐指数
1
解决办法
5584
查看次数

标签 统计

algorithm ×1

partitioning ×1

quicksort ×1

sorting ×1