算法之快速排序篇

快速排序基本思想及实现

今天给大家分享快速排序是如何实现的,希望大家看了这篇文章能够有所收获。

基本思想

快速排序是通过一趟排序将要排序的数据分割成两部分,其中一部分数据比另一部分数据都要小,再按照此方法递归进行,最终实现整个数据变成有序系列。

实现步骤

将数组 [3,5,8,1,2,9,4,7,6] 从小到大排序,

准备工作

找一个基准数B(随机选择,这里为了方便演示,选择最右边的数字最基准数),这里找到基准数B是最右边的数字6,再找最左边的数字3表示为左标记L,最右边的数字7表示为右标记R,准备工作就绪,此时数组指向如下:

358129476
LRB

步骤①:首先将L向右移动,当L>B时,L停止移动,数组顺序不变,此时:

358129476
LRB

步骤②:然后将R像左移动,当R<B时,R停止移动,数组顺序不变,此时:

358129476
LRB

步骤③:当两标记都停止移动时,交换两标记所指的值(即数组元素),此时8和4替换位置:
注意:思考这时候问什么要交换?因为我们的目标是将比基准数B小的值移到B左边,比B大的值移到B右边,L和R之所以停止移动,是遇到了不满足目标的值,此时将两者交换,就又能向目标更近一步了。

354129876
LRB

步骤④:交换过后,再如此循环步骤①②③,此时:

354129876
L RB

步骤⑤:当L和R触碰到一起时,停止移动,并将L和R所指的数字与B交换,此时:

354126879
L RB

我们得知:L左标记的作用是找到比B小的元素,R 的作用是找到比B大的元素,此时:数字6完成排序,下一轮就不带它了。以上步骤①到⑤,完成了第一轮交换,我们可以按照递归的思想,将基准点6左右两侧数字再进行一轮交换

354126879
完成排序

步骤⑥:选择基准数B,左标记L,右标记R,如下:
注:打√表示完成排序

354126879
LRB

接着,以此类推,(不熟悉交换步骤可以滑上去看步骤①到⑥)1和3交换

154326879
LRB
124356879
L RB

上面第二轮完成,2完成排序,1也完成排序下面进行第三轮:

124356879
RL B

5完成排序,最后

123456789
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值