当下面的代码段中的低等于高时,为什么下面的快速排序分区方法不能保证低/高左侧的元素小于枢轴,而低/高的右侧的元素更大比枢轴。
int middle = low + (high - low) / 2;
int pivot = a[middle];
while (low < high)
{
while (a[low] < pivot)
{
low++;
}
while (a[high] > pivot)
{
high--;
}
if (low <= high)
{
swap( a, low, high );
low++;
high--;
}
}
不知道&#39; low&#39;的定义是什么?和&#39;高&#39;是?一旦我们达到结束条件,表示枢轴左侧和枢轴右侧的元素?
考虑下面的数组
int[] a = {37, 89, 17, 51, 53, 75};
这里的低点等于索引1的高点,它有元素89.但是,索引1是元素89的正确位置,索引1左边的元素都小于89,这是不正确的, 89右边的元素都大于89。
为什么这个算法出错了?我希望曾经,低等于高,我们找到了该枢轴的正确位置,并且可以继续省略该元素,并递归地重复左边和右边的元素算法。