quicksort算法不排序最终元素?

时间:2016-07-25 16:06:50

标签: c# quicksort

我使用我在维基百科上找到的算法编写了这段代码:

    public static void quicksort(int[] arr, int low, int hi)
    {
        if(low < hi)
        {
            int pivot = part( arr, low, hi);
            quicksort( arr, low, pivot - 1);
            quicksort( arr, pivot + 1, hi);
        }
    }
    public static int part(int[] arr, int low, int hi)
    {
        int pivot = arr[hi];

        int i = low;
        for(int j = low; j < hi - 1; j++)
        {
            if(arr[j] <= pivot)
            {
                swap(arr, i, j);
                i++;
            }
        }
        swap(arr, i, hi);
        return i;
    }

    public static void swap(int[] ar, int a, int b)
    {
        int temp = ar[a];
        ar[a] = ar[b];
        ar[b] = temp;
    }

鉴于此输入:

31, 5, 5, 5, 5, 4, 4, 4, 5, 4
人们应该期望得到:

4, 4, 4, 4, 5, 5, 5, 5, 5, 31

但我得到了:

4, 4, 4, 4, 5, 5, 5, 5, 31, 5

是什么给出了?

我用quicksort(array, 0, array.Length - 1);

调用初始排序

1 个答案:

答案 0 :(得分:2)

如果您使用Length - 1调用它,则此循环:

 for (int j = low; j < hi - 1; j++)

..应该是:

 for (int j = low; j <= hi ; j++)