在进行快速排序过程中,看到
while (i != j)
{
while (a[j] >= temp&&i < j)
j--;
while (a[i] <= temp&&i < j)
i++;
t = a[i], a[i] = a[j], a[j] = t;
}
这一段,为什么遍历的时候要从右边开始遍历。
产生疑问所以我们可以举个例子:7 1 2 3 4
这五个数字,开始遍历,假如从左边开始,我们开始时就已经从第二数字“1”开始了,当我们进行交换出现1 7 2 3 4显然不对!2 3 4都比7小但是却在7右边。
由此分析我们之所以要从右边开始遍历是因为哨兵在左边,而由代码我们可以看出来while (a[i] <= temp&&i < j) j--;
要找到一个比哨兵大的数,假如哨兵右边都是比哨兵小的数,由于我们的起点就是哨兵右边的数字,所以代码默认为哨兵右边一个数就是比哨兵大的数,这显然不对。