更改元素等于快速排序中的枢轴

时间:2016-09-29 18:44:16

标签: quicksort

为什么快速排序更改(在分区无效中)与元素具有相同价值的元素有什么好处?

我被问到了,但我不知道为什么......如果他们不改变,可能是因为数组可能会保持无序?

1 3 5 [3] 2 6
    i     j     swap to

1 3 2 [3] 5 6

由于某种原因,它会在以后进行更换?我不知道......

我想知道为什么交换与枢轴相同值的元素是一件好事。

1 个答案:

答案 0 :(得分:0)

考虑这个数组:int[] array = {1, 2, 4, 3, 4};

如果我们通过计算array[2] = 4

选择它,则Pivot可以是(low + high) / 2

现在,让我们考虑一下当元素等于pivot时我们不交换数组元素的情况。我们将陷入无限循环并获得StackOverflowError。

private int partition(int[] array, int left, int right){
    int pivot = array[(left + right) / 2];
    while(left <= right){
        while(array[left] <= pivot) // CAUSES INFINITE LOOP. Should be array[left] < pivot
            left++;
        while(array[right] > pivot)
            right--;

        if(left <= right){
            swap(left, right, array);
            left++;
            right--;
        }
    }

    return left;
}