当前课程知识点:数据结构(下) > 第十二章 排序 > (a1)快速排序:算法A > 12a1-5: 实例
以下我们就来通过这个具体的实例
体会partition算法的具体过程
这里的待排序序列由十个元素构成
在初始状态下子序列U
也就是整个序列
按照通常的习惯
我们将首元素6取作待培养的侯选轴点
在将它取出备份之后
对应的单元在逻辑上
可以视作为是空闲的
因此接下来
我们首先要尝试着去拓展子序列G
虽然此时它还是空
为此我们总是要考察U的末元素
也就是此时的7
我们发现这个元素的确大于侯选的轴点6
因此它的确可以归入子序列G
子序列G拥有了第一个元素
而子序列U
则相应的减少了一个元素
然而接下来子序列G的拓展
却不得不止步于新的末元素
因为我们注意到
这个元素的数值为1
要严格的小于侯选轴点6
还记得我们刚才为此设计的处理方法吗
没错
既然此时的这个末元素更小
我们也就自然的可以将它归入到
子序列L中
为此我们只需将它转移至
当前仍为空闲的首单元
接下来在拥有了第一个元素之后
子序列L也会试图继续向右拓展
很幸运我们发现接下来的首元素3
也要小于侯选轴点
这就意味着我们同样可以将它归入到
子序列L中
然而接下来子序列L的拓展
也会止步于新的首元素
因为我们发现新的这个首元素
在数值上是要大于侯选轴点
请放心 对于这种情况我们的算法
依然足以处理 难道不是吗
既然这个元素在数值上要超过侯选轴点
所以它也自然可以归入于子序列G中
而此时紧邻于子序列G的左侧
恰好有一个空闲单元
因此接下来我们只需将这个更大的元素
转移至这个空闲的单元
如此子序列G向前拓展了一个单元
而子序列U也相应的减少了一个单元
同时在这个元素被转移之后
腾出来的首单元
又可继而被视作为一个空闲单元
也就是说算法的不变性依然保持
以下同理
子序列G的拓展会止步于元素5b
于是我们不妨就将这个元素转移至
当前空闲的首单元处
并转而去尝试拓展子序列L
随后在依次加入了元素2和5a之后
子序列L的拓展也会止步于元素9
再一次的我们可以将这个元素转移至
当前为空的末单元
并在接下来转而去尝试拓展子序列G
很遗憾我们的尝试依然终止于
更小的元素4
因此我们必须将它转移至
当前为空的首单元
至此整个子序列U的长度
已经退化为1
因此我们只需将侯选的元素6
植入于其中
这个元素
也就成为了一个名副其实的轴点
作为验证你可以逐个的检查一下
在这个元素之前的所有元素
的确都不比它大
而在它之后的所有的元素
也的确都不比它小
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试