排序时间稳定性

注:前七种排序是基于关键字比较的排序算法

基数排序是基于分配/收集的排序算法

(1)就平均性能而言,快速排序是最快的排序方法(即所需时间最省),(适于原始数据杂乱无章,记录数n 较大,且对稳定性没有要求的情况)但快速排序在最坏的情况下(记录正序或基本有序。轴值没有能够很好的分割数组时,即一个子数组没有结点,而另一个数组中有n-1个结点)的时间性能不如堆和归并排序。

(2)当记录基本有序或n 较大时,归并排序比堆排序的时间性能更好,但它所需的辅助存储空间最多。(归并排序适于记录n 较大,内存空间允许且要求排序稳定的情况)从时间和空间两个方面的性能考虑,堆排序的综合性能较好。

(3)当记录基本有序或n 较小时,直接插入排序是最佳的排序方法。

(4)shell 排序在数组规模达到1000时,明显好于任何一个时间复杂度为O (n )的排序方法

(5)基数排序(适于n 值很大而关键字的构成位数较少的序列情况)的效率与原始数据的排列顺序无关

(6)简单选择排序的比较次数与序列的初始状态无关(因为它在每选出一个当前无序子序列中的最小(或最大)关键字记录的过程中都需要与无序子序列中的每个记录的关键字比较一次),但记录移动次数与序列的初始状态有关

(7)所需辅助空间量与数据规模(记录n )无关的、且其空间复杂度为O(1)的排序方法是简单排序、希尔排序和堆排序

(8)快速排序、直接选择排序、堆排序和冒泡排序能保证每趟排序至少将一个元素放到其最终位置上

7.9

排序问题的下限

这里,我们讨论的问题是:一个问题的时间代价,而不是某个算法的时间代价

一个问题的上限(O (n ))可以定义为已知算法中速度最快的渐进时间代价,它的下限解决这个问题所有算法的最佳可能效率,包括尚未设计出来的算法。

一旦问题的上限与下限相同,从渐进分析的意义上说,不可能有更有效的算法了 基于比较的排序算法所能达到的最快速度到底有多快?

没有一种算法能够在平均及最差情况下比O (n log 2n ) 快(O (n log 2n ) ——在最坏情况下能达到的最好)

证明:所有基于比较的算法都可以归结为一棵二叉树,树的一个内部结点对应于一个比较。其次,二叉树叶结点数目最小值是n 的阶乘。

最后,具有n ﹗个叶节点的二叉树的最小深度是Ω(n log n ) 。 (详见书P163)

结论是甚至像基数排序这样的算法在平均情况下的下限也是Ω(n log n )

2

2

注:前七种排序是基于关键字比较的排序算法

基数排序是基于分配/收集的排序算法

(1)就平均性能而言,快速排序是最快的排序方法(即所需时间最省),(适于原始数据杂乱无章,记录数n 较大,且对稳定性没有要求的情况)但快速排序在最坏的情况下(记录正序或基本有序。轴值没有能够很好的分割数组时,即一个子数组没有结点,而另一个数组中有n-1个结点)的时间性能不如堆和归并排序。

(2)当记录基本有序或n 较大时,归并排序比堆排序的时间性能更好,但它所需的辅助存储空间最多。(归并排序适于记录n 较大,内存空间允许且要求排序稳定的情况)从时间和空间两个方面的性能考虑,堆排序的综合性能较好。

(3)当记录基本有序或n 较小时,直接插入排序是最佳的排序方法。

(4)shell 排序在数组规模达到1000时,明显好于任何一个时间复杂度为O (n )的排序方法

(5)基数排序(适于n 值很大而关键字的构成位数较少的序列情况)的效率与原始数据的排列顺序无关

(6)简单选择排序的比较次数与序列的初始状态无关(因为它在每选出一个当前无序子序列中的最小(或最大)关键字记录的过程中都需要与无序子序列中的每个记录的关键字比较一次),但记录移动次数与序列的初始状态有关

(7)所需辅助空间量与数据规模(记录n )无关的、且其空间复杂度为O(1)的排序方法是简单排序、希尔排序和堆排序

(8)快速排序、直接选择排序、堆排序和冒泡排序能保证每趟排序至少将一个元素放到其最终位置上

7.9

排序问题的下限

这里,我们讨论的问题是:一个问题的时间代价,而不是某个算法的时间代价

一个问题的上限(O (n ))可以定义为已知算法中速度最快的渐进时间代价,它的下限解决这个问题所有算法的最佳可能效率,包括尚未设计出来的算法。

一旦问题的上限与下限相同,从渐进分析的意义上说,不可能有更有效的算法了 基于比较的排序算法所能达到的最快速度到底有多快?

没有一种算法能够在平均及最差情况下比O (n log 2n ) 快(O (n log 2n ) ——在最坏情况下能达到的最好)

证明:所有基于比较的算法都可以归结为一棵二叉树,树的一个内部结点对应于一个比较。其次,二叉树叶结点数目最小值是n 的阶乘。

最后,具有n ﹗个叶节点的二叉树的最小深度是Ω(n log n ) 。 (详见书P163)

结论是甚至像基数排序这样的算法在平均情况下的下限也是Ω(n log n )

2

2


相关内容

  • 数据结构排序毕业论文
  • 内容摘要 ..................................................................................................................................... 3 关键字 ..... ...

  • 各种排序的时间复杂度
  • 排序算法 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 分类 在计算机科学所使用的排序算法通常被分类为: 计算的复杂度(最差.平均.和最好表现),依据串列(list)的大小(n).一般而言,好的表现是O.(n log n),且坏的行为是Ω(n2).对於一个 ...

  • 请简述各种排序算法的时间复杂度
  • 1.在各种排序算法中,哪些是稳定的?哪些是不稳定的? 2.请简述各种排序算法的时间复杂度,空间复杂度(最好情况,最差情况,平均情况) 答:1.快速排序.希尔排序.堆排序.直接选择排序不是稳定的排序算法,而基数排序.冒泡排序.直接插入排序.折半插入排序.归并排序是稳定的排序算法. 2.时间复杂度 比较 ...

  • 数据结构中几种常见的排序算法之比较
  • 几种常见的排序算法之比较 2010-06-2014:04摘要:排序的基本概念以及其算法的种类,介绍几种常见的排序算法的算法:冒泡排的复杂度,然后以表格的形式,清晰直观的表现出它们的复杂度的不同.在研究学关键词: 一.引言 排序算法,是计算机编程中的一个常见问题.在日常的数据处理中,面对纷繁我们也许有 ...

  • 排序算法分类以及复杂度
  • 一. 稳定性 稳定性是指待排序的序列中有两个或者两个以上相同的项,排序前和排序后,看这些相同的项的相对位置有没有没发生变化,如果没有发生变化,就是稳定的:如果发生变化,就是不稳定的. 二. 排序分类以及复杂度 1. 插入类排序 1.1.直接插入排序 最坏时间复杂度:O(n^2) 最好时间复杂度:O( ...

  • 冒泡排序算法的分析与改进 算法设计
  • 冒泡排序算法的分析与改进 孙伟 (安徽中医学院 医药信息工程学院 09医软一班,安徽合肥,230009) 摘 要: 冒泡排序算法有两个优点:1"编程复杂度"很低,很容易写出代码:2. 具有稳定性,这里的稳定性是指原序列中相同元素的相对顺序仍然保持到排序后的序列,但当需要排序的数据 ...

  • 实验四题目1
  • 数据结构实验报告 实验名称: 实验四--题目一 学生姓名: 唐文旭 班 级:2013211118 班内序号: 09 学 号: 2013210524 日 期: 2015年1月5日 1.实验要求 使用简单数组实现下面各种排序算法,并进行比较. 排序算法: 1.插入排序 2.希尔排序 3.冒泡排序 4.快 ...

  • 英文翻译修改完全
  • 温雪然,辛玲师和李柳 1. 部门的沟通和信息,云南大学,昆明,中国 2. 物流部.云南财经大学.昆明,中国 3. 电子邮件:[email protected],[email protected] 摘要: 本文重点提出了调查单位材料的控制机制组合排序,并将分拣操作过程理解为订单的到达过程, ...

  • 常用的排序算法的时间复杂度和空间复杂度
  • 常用的排序算法的时间复杂度和空间复杂度 排序法 冒泡排序 快速排序 选择排序 二叉树排序 插入排序 堆排序 希尔排序 最差时间分析 O(n ) O(n ) O(n ) O(n ) O(n ) O(n*log2n) O2 2 2 2 2平均时间复杂度 O(n ) O(n*log2n) O(n ) O( ...