排序——快速排序
来源:互联网 发布:centos 压缩文件 编辑:程序博客网 时间:2024/04/30 09:29
之前总以为自己已经掌握了快速排序,可是眼高手低,没有好好研究一下它是否是稳定的排序,以及涉及重复元素等问题,最近用到时总是出现小的bug,于是又潜心翻看《算法导论》,经过测试,写出一个正确的快速排序算法。
写正确关键在于paration函数:
(1)如果s<=k<=i,则有a[k]<=m(中枢元素)
(2)如果i+1<=k<=j-1,则有a[i]>m
(3)如果k=e,则有a[k]=x
变量s和e分别表示数组a的起始和结尾元素,i用于跟踪j,直到遇到>中枢元素m的值,此时a[i+1]>m,等待下次(如果存在)遇到<=中枢元素m的知,然后交换。
注意:在paration()函数中选择随机中枢元素时,必须基于当前s值(即在当前s上加上随机值)。
关于paration的另一种写法如下:
但是这种写法非常容易出错,必须遵循:
(1)如果取中枢元素m=a[e](即结尾元素),必须保证先做low的自增操作,然后是high的自减操作。
(2)如果取中枢元素m=a[s](即起始元素),必须保证先做high的自减操作,然后是high的自增操作。(代码中所示)
否则将会出现错误。测试案例如3,3,3,1,5,2,4等。
- 排序—快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 排序——快速排序
- 交换排序—快速排序
- 排序算法—快速排序
- 排序算法—快速排序
- 内部排序—快速排序
- 排序方式—/冒泡排序/快速排序
- 排序3——堆排序,归并排序,快速排序
- 快速排序—java
- MooTools资源大集合1
- [总结转贴]领域模型
- MooTools资源大集合2
- WSDL 详解
- 用XMPP4r来集成IM —— 第一节
- 排序——快速排序
- Send / Recv Usage(2)
- 一个完整的项目管理流程
- 2009.8.2 OA项目组一周工作报告
- 啊,目标!
- ajax编码问题
- Oracle 中常见函数在teradata中如何实现
- 等咱有了钱......(全集)
- Java程序员,面试必读