理解快速排序算法的排序过程

本文详细介绍了快速排序算法,包括其基本思想、实现过程、C++实现代码,并通过与冒泡排序的性能测试,展示了快速排序的高效性。此外,还提供了完整的程序源码链接供下载参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,快速排序算法大概

(1)快速排序(quick sort)也叫分区排序,是目前应用最广泛的排序算法。在标准C++类库中排序程序被称为qsort,因为快速排序是其实现中最基本的算法。
(2)排序算法的优点:好的快速排序算法在大多数计算机上运行得都比其他排序算法快,而且快速排序算法在空间上只使用一个小的辅助栈,其内部的循环也很小,另外快速排序算法也很容易实现,可以处理多种不同的输入数据,许多情况下它所消耗的资源也比其他排序算法小。
(3)快速排序的注意点:快速排序是一种不稳定的排序方法,即对于排序码相同的元素,排序后可能会颠倒次序。

2,快速排序的实现过程

(1)整体思路:
其基本思想是任取待排序元素序列中的某个元素(例如取第一个元素)作为基准,按照该元素的排序码大小,将整个元素序列划分为左右两个子序列:左侧子序列中的排序码都小于基准元素的排序码,右侧子序列中所有元素的排序码都大于或等于基准元素的排序码。基准元素则排在两个子序列中间(这也是该元素最终应安放的位置)。然后分别对这两个子序列重复实行上述方法(递归过程),直到所有元素都排在相应位置上为止。

(2)思路中的隐含意思
通过思路可以知道,快速排序也叫分区排序的原因。快排的目的就是用一个基准数据对整个待排序的数列“分区”,左区都小于基准,右区都大于基准。那么这就会隐含着一个问题,我们只要达到分区的目的就可以,而不在乎过程;而想把一个数列分出上述符合要求的数列,其过程肯定不唯一,这也就意味着快速排序算法的实现方式不唯一。下面是摘自网友的三种实现方式:

1>方式一:设置两个“哨兵”从序列的两端同时寻找小于基准值和大于基准值得元素,然后交换,最终实现按基准值分区的目的。
原文链接:http://bbs.ahalei.com/forum.phpmod=viewthread&tid=4419&page=1#pid37543

2>方式二:也是从两端进行,但是不像方式一那样同时进行,而是先在右端找到小于基准值得与基准值交换,然后再从左端找到大于基准值的元素填补刚才右端的那个位置,最终也是实现了按基准值分区的目的。
原文链接:
http://blog.youkuaiyun.com/morewindows/article/details/6684558

3>方式三:从一端进行,最终也是为了实现分区的目的。因为这里我主要是实现此方式,所以下面会有详细的介绍。

(3)方式三的具体实现过程
这里结合具体的例子认识其过程,如下面一个无序数列:
数据序列

1>首先选择21(也就是第一个元素)作为基准元素,我们的目的是把大于21的元素都挪到整个序列的右半部分,把小于21的元素都挪到整个序列的左半部分。
按照方式3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值