快速排序(前后指针法)

这篇博客详细介绍了快速排序算法中的一种划分方法——前后指针法。通过使用两个指针,一个在前一个在后,以基准值为中心进行划分,通过一系列判断和交换操作确定基准值的最终位置,实现数列的排序。文章通过图解和代码演示了整个过程。
摘要由CSDN通过智能技术生成

之前的两篇中,为大家介绍了霍尔划分挖坑法划分,这一篇,我们来看看第三种划分方法——前后指针法

前后指针法

顾名思义,需要两个指针,一个在前一个在后,分别用cur表示前指针,prev表示后指针(这里的指针的意思是待排序数列的下标),依旧是这个图,初始时,我们规定cur在prev的后一个位置,这里我们还是选择第一个数为基准值,如下图
在这里插入图片描述
箭头指向的为基准值,prev指向这个数列开始的第一个,cur指向prev的后一个位置,此时我们便将它初始化完成。那么现在需要怎么操作呢?
我们规定,prev每次都需要指向从左到它本身之间最后一个小于基准值的数,如果cur的值大于基准值,这时只让cur++,如果cur指向的位置小于基准值,这时我们让prev++后,判断是否与cur的位置相等,若不相等,则交换cur和prev的值。直到cur>end后,我们再交换prev和基准值,这样基准值的位置也就确定了

现在我们一步步图解
此时初始化后我们发现,cur指向的值小于基准值,我们让prev++,发现prev和cur相等,这时再让cur++,开始下次的判断,如下图
在这里插入图片描述
这时cur明显大于基准值,所以我们继续让cur++,而prev保持不动,得到下图
在这里插入图片描述
这时我们cur的值小于基准值,我们让prev++,此时prev指向32,我们发现prev不等于cur了,这时我们交换prev和cur的值,如下图
在这里插入图片描述
交换后,继续让cur向后走,此时发现cur的值为60,大于基准值,于是prev保持不懂,使cur继续向后走,走到2的位置时,发现其小于基准值,我们让prev++,发现prev为32不等于cur,我们继续交换pre

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值