关于快速排序遍历时为什么要从右边开始。

博客探讨了在快速排序过程中,为何选择从数组右边开始遍历的原因。通过举例71234这个序列,说明如果从左边开始遍历可能会导致错误的排序结果。代码分析显示,从右边开始遍历是为了确保找到大于哨兵值的元素,避免错误的假设哨兵右边的数字一定大于哨兵。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在进行快速排序过程中,看到

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--;要找到一个比哨兵大的数,假如哨兵右边都是比哨兵小的数,由于我们的起点就是哨兵右边的数字,所以代码默认为哨兵右边一个数就是比哨兵大的数,这显然不对。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值