为什么快速排序更改(在分区无效中)与元素具有相同价值的元素有什么好处?
我被问到了,但我不知道为什么......如果他们不改变,可能是因为数组可能会保持无序?
1 3 5 [3] 2 6
i j swap to
1 3 2 [3] 5 6
由于某种原因,它会在以后进行更换?我不知道......
我想知道为什么交换与枢轴相同值的元素是一件好事。
答案 0 :(得分:0)
考虑这个数组:int[] array = {1, 2, 4, 3, 4};
如果我们通过计算array[2] = 4
(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;
}