手写快速排序心得

自己捣鼓了好久,过程中错误百出。

  1. 对列表进行双向扫描时,设左侧指针指向第left_idx元素,右侧指针指向第right_idx元素。在任何一个状态下,只有前left_idx-1个元素符合pivot左侧条件,后right_idx+1个元素符合pivot右侧条件。
  2. 扫描终止条件,应该是left_idx > right_idx, 即left_idx == right_idx + 1. 假设是先从左侧开始扫描,可能的有2种情况:①完成最后一次交换②左侧或右侧指针在扫描时移动至终止状态。无论是以上哪种情况,均符合1中所属,即左右指针各自前一个身位乃至更早扫描的元素均符合各侧的要求。
  3. 如果pivot元素在开始时被移至最左侧,再扫描终止后需将pivot与left_idx-1所对应元素进行换位,再从pivot的位置将列表截断(两个子列表均不含pivot元素),然后对2个子列表进行快速排序。如果开始时pivot被移至最右侧,则扫描终止后需与right+1所对应元素换位。
  4. 初始时left_idx>=right_idx,则直接结束排序。

个人拙见,欢迎补充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值