快排第一趟序列

若给定的关键字集合为{20,15,14,18,21,36,40,10},一趟快速排序结束时,键值的排序为:

快排第一趟序列:

以后做快排的题记得用填坑法来做,不要从左到右遍历了,算法如下:

1. 默认选取第一个元素作为基准,将第一个位置变成空位

2. 从尾开始遍历,将第一个比基准小的元素填到空位,然后将该元素的位置变成空位

3. 从头开始遍历,将第一个比基准大的元素填到空位,然后将该元素的位置变成空位

4. 重复 2 和 3,直到空位出现在中间

递归地对所有子序列执行以上步骤即可完成快速排序。

按照该步骤:

1、空 15 14 18 21 36 40 10

2、10 15 14 18 空 36 40 21

发现 已经在中间了,那么把20放中间即可

根据上面的算法可以得到第一趟排序结束的时候序列为:10, 15, 14, 18, 20, 36, 40 ,21

快速排序的基本思路是:选取一个基准元素,将序列中比它小的元素放在它的左边,比它大的元素放在它的右边,然后对左右两边分别进行递归排序。第一趟快速排序的过程如下: 1.选取基准元素:选择序列中的第一个元素 Tim 作为基准元素。 2.进行划分:从序列的第二个元素开始,依次将每个元素与基准元素进行比较。将比基准元素小的元素放在基准元素左边,大于等于基准元素的元素放在基准元素右边。 初始状态: (Tim,Kay,Eva,Roy,Dot,Jon,Kim,Ann,Tom,Jim,Guy,Amy) 第一次划分后: (Tim,Kay,Eva,Amy,Dot,Jon,Kim,Ann,Tom,Jim,Guy,Roy) 3.确定基准元素位置:此时基准元素 Tim 已经被放置在了序列中的正确位置,它的左边都是比它小的元素,右边都是大于等于它的元素。我们可以将序列分成两个部分,分别对左右两个部分进行递归排序。 左半部分:(Eva,Amy,Dot,Jon,Kay,Kim,Ann,Tom,Jim,Guy) 右半部分:(Roy) 注意:在这个过程中,基准元素的位置不发生改变,因此它不需要参与左右子序列的排序。 4.递归排序:对左右两个部分分别进行递归排序,直到所有子序列都有序。 左半部分的排序过程: 选取基准元素:选择序列中的第一个元素 Eva 作为基准元素。 进行划分:从序列的第二个元素开始,依次将每个元素与基准元素进行比较。将比基准元素小的元素放在基准元素左边,大于等于基准元素的元素放在基准元素右边。 第一次划分后: (Eva,Amy,Dot,Jon,Kay,Kim,Ann,Tom,Jim,Guy) 左半部分已经有序,无需递归排序。 右半部分的排序过程: 选取基准元素:选择序列中的第一个元素 Roy 作为基准元素。 进行划分:从序列的第二个元素开始,依次将每个元素与基准元素进行比较。将比基准元素小的元素放在基准元素左边,大于等于基准元素的元素放在基准元素右边。 第一次划分后: (Roy) 右半部分已经有序,无需递归排序。 最终排序结果为: (Amy,Ann,Dot,Eva,Guy,Jim,Jon,Kay,Kim,Roy,Tim,Tom)
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值