知识大全 排序 - 交换排序 - 快速排序 (四)
Posted 知
篇首语:采得百花成蜜后,为谁辛苦为谁甜。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 排序 - 交换排序 - 快速排序 (四)相关的知识,希望对你有一定的参考价值。
算法分析
快速排序的时间主要耗费在划分操作上 对长度为k的区间进行划分 共需k 次关键字的比较
( )最坏时间复杂度
最坏情况是每次划分选取的基准都是当前无序区中关键字最小(或最大)的记录 划分的结果是基准左边的子区间为空(或右边的子
区间为空) 而划分所得的另一个非空的子区间中记录数目 仅仅比划分前的无序区中记录个数减少一个
因此 快速排序必须做n 次划分 第i次划分开始时区间长度为n i+ 所需的比较次数为n i( ≤i≤n ) 故总的比较次数达
到最大值
C max = n(n )/ =O(n )
如果按上面给出的划分算法 每次取当前无序区的第 个记录为基准 那么当文件的记录已按递增序(或递减序)排列时 每次划分
所取的基准就是当前无序区中关键字最小(或最大)的记录 则快速排序所需的比较次数反而最多
( ) 最好时间复杂度
在最好情况下 每次划分所取的基准都是当前无序区的 中值 记录 划分的结果是基准的左 右两个无序子区间的长度大致相等
总的关键字比较次数
(nlgn)
注意
用递归树来分析最好情况下的比较次数更简单 因为每次划分后左 右子区间长度大致相等 故递归树的高度为O(lgn) 而递归
树每一层上各结点所对应的划分过程中所需要的关键字比较次数总和不超过n 故整个排序过程所需要的关键字比较总次数
C(n)=O(nlgn)
因为快速排序的记录移动次数不大于比较的次数 所以快速排序的最坏时间复杂度应为 (n ) 最好时间复杂度为O(nlgn)
( )基准关键字的选取
在当前无序区中选取划分的基准关键字是决定算法性能的关键
① 三者取中 的规则
三者取中 规则 即在当前区间里 将该区间首 尾和中间位置上的关键字比较 取三者之中值所对应的记录作为基准 在划分
开始前将该基准记录和该区伺的第 个记录进行交换 此后的划分过程与上面所给的Partition算法完全相同
②取位于low和high之间的随机数k(low≤k≤high) 用R[k]作为基准
选取基准最好的方法是用一个随机函数产生一个取位于low和high之间的随机数k(low≤k≤high) 用R[k]作为基准 这相当于
强迫R[low high]中的记录是随机分布的 用此方法所得到的快速排序一般称为随机的快速排序 具体算法【参见教材】
注意
随机化的快速排序与一般的快速排序算法差别很小 但随机化后 算法的性能大大地提高了 尤其是对初始有序的文件 一般不
可能导致最坏情况的发生 算法的随机化不仅仅适用于快速排序 也适用于其它需要数据随机分布的算法
( )平均时间复杂度
尽管快速排序的最坏时间为O(n ) 但就平均性能而言 它是基于关键字比较的内部排序算法中速度最快者 快速排序亦因此
而得名 它的平均时间复杂度为O(nlgn)
( )空间复杂度
快速排序在系统内部需要一个栈来实现递归 若每次划分较为均匀 则其递归树的高度为O(lgn) 故递归后需栈空间为O(lgn)
最坏情况下 递归树的高度为O(n) 所需的栈空间为O(n)
( )稳定性
cha138/Article/program/sjjg/201311/23783相关参考
快速排序执行过程 快速排序执行的全过程可用递归树来描述 > > 分析 ()递归执行的路线如图中带箭头的包络线所示 ()递归树上每一结点左旁方括号表示当前待排序的区间结点内的关键字是划分
快速排序 快速排序(QuickSort)通过一趟排序将待排记录分割成独立的两部分其中一部分记录的关键字均比另一部分记录的关键字小则可分别对这两部分记录继续进行排序以达到整个序列有序快速排序三个步骤
划分算法Partition ()简单的划分方法 ①具体做法 第一步(初始化)设置两个指针i和j它们的初值分别为区间的下界和上界即i=lowi=high;选取无序区的第一个记录 R[i](即
交换排序的基本思想是两两比较待排序记录的关键字发现两个记录的次序相反时即进行交换直到没有反序的记录为止 应用交换排序基本思想的主要排序方法有冒泡排序和快速排序 冒泡排序 排序方法 将被排序
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序
交换排序的基本思想两两比较待排序记录的关键字发现两个记录的次序相反时即进行交换直到没有反序的记录为止 冒泡排序 冒泡排序将当前未排序的记录自上而下依次对相邻的两个记录进行比较若为逆序则
排序是组织数据最基本的运算排序的方法也很多本章给出了几种典型的排序方法见下表 排序类别插入排序交换排序选择排序归并排序分配排序 排序方法直接插入冒泡法直接选择*归并排序箱排序 希尔排序*快速
算法分析 ()算法的最好时间复杂度 若文件的初始状态是正序的一趟扫描即可完成排序所需的关键字比较次数C和记录移动次数M均达到最小值 Cmin=n Mmin= 冒泡排序最好的时间复杂度为O
选择排序(SelectionSort)的基本思想是每一趟从待排序的记录中选出关键字最小的记录顺序放在已排好序的子文件的最后直到全部记录排序完毕 直接选择排序 直接选择排序(Straig
按平均时间将排序分为四类 ()平方阶(O(n))排序 一般称为简单排序例如直接插入直接选择和冒泡排序; ()线性对数阶(O(nlgn))排序 如快速堆和归并排序; ()O(n+£)阶排序