当前课程知识点:数据结构(下) > 第十二章 排序 > (a1)快速排序:算法A > 12a1-1: 分而治之
同学们好
从今天开始我们进入到第12章
这也是我们这门课程的最后一章
我们的主题将是排序
实际上我们对于排序问题并不陌生
你应该记得在最开始的几章
我们就分别介绍过起泡排序
插入排序 选择排序以及归并排序
而在介绍散列技术时
我们也曾介绍过桶排序
计数排序 以及基数排序
在讨论优先级队列时
我们也结合堆这种结构
介绍过堆排序
以及更为通用的锦标赛排序
因此在本章中
我们将进而重点的学习若干种
高级的排序算法
并讨论与之相关的几个衍生问题
在接下来的第一节
就让我们首先来学习快速排序算法
快速排序quicksort
是霍尔爵士在上世纪六十年代
发明的一种算法
这也是基于分治策略的又一典型算法
具体来说对于任何一个待排序序列
这里也需要将它们分为
前后两个子序列
并对这两个规模更小的子序列
递归的事实排序
听到这个思路
你或许会想起归并排序
是的
quicksort和mergesort
都采用了分治策略
但二者又有很大的区别
比如对于快速排序来说
子问题之间的独立性更为鲜明
比如这里要求前一序列中的任何元素
在数值上都不得超过后一序列中的
任意元素
这是一个非常强的条件
如果这条件的确满足
那么在分别递归的
对前一序列和后一序列进行排序之后
只要将二者简单的串接起来
也就自然的得到了整体的有序序列
从而完成最初的排序任务
当然与归并排序一样
只含单个元素的序列
自身就是有序的
因此也可以作为平凡的递归基
由上可见
按照霍尔爵士的设想
只要能够完成这种左小右大式的
子序列划分
那么剩余的工作
可以完全的教给递归来完成
因此对于快速排序来说
核心的任务与难点
在于如何完成子任务
或子序列的划分
从这点来看
归并排序恰好相反
我们知道对于归并排序算法而言
其计算量以及难点
都在于如何将子任务的解进行合并
那么霍尔爵士所设想的这种划分
具体的又当如何实现呢
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试