蓝桥杯算法很美学习笔记3.2~3.5

3.2快排算法

快排的重点是划分,归并的重点是合并

快排:中间划一刀,左右都做排序,最后合并

归并:分组后对每个分组进行排序,最后合并所有分组

快排之单向扫描分区法:

设置两个指针和一个主元(相当于做一个标记,标记哪个元素都行),第一个指针放在数组最左边,它左边的数小于等于主元,第二个指针放在数组最右边,它右边的数大于主元。扫描规则是从左边的指针开始扫描,如果指向的数小于等于主元则首指针右移,如果大于主元则将这个数和尾指针指向的数交换,尾指针右移。当首尾指针相遇的时候,还能执行一次扫描,此时

快排之双向扫描分区法:

选定主元后,左右指针**同时**向中间靠拢,左边遇到大于主元的就与右指针交换,然后左指针右移一位,右指针与主元比较,小于等于主元就与左指针交换,然后左移一位。

当循环结束后,两个指针的位置会变成如图所示,然后将主元和右指针互换(主元是等于,右指针是小于等于,只要左半部分全都是小于等于就行),最后返回右指针,这样就得到了一左一右两个分组,对这两个分组重复调用快排算法即可

代码实现:

快排之三向扫描分区法:

equal指针用于标记相等的数组开始的位置,s指针继续往后扫描,规则见左下

适用于数组中跟主元相等的元素较多时,将跟主元相等的元素放在同一个区间内,然后主元和e前一个元素进行交换,最后返回一个【主元的位置,b指针的位置】的数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值