408强化(六)排序算法

问题 

  1. 哪两个算法最好时间复杂度为O(n)?
  2. 哪四个算法是不稳定的?
  3. 哪五个算法最坏时间复杂度是O(n^{2})?假设希尔排序使用希尔增量序列
  4. 哪四个算法的最好,最坏,平均时间复杂度都相同?
  5. 说明一下八个排序算法的空间复杂度?
  6. 哪些算法需要利用顺序存储?
  7. 哪些算法趟数与原始序列状态有关?
  8. 哪些算法的比较次数与原始序列状态无关?
  9. 折半插入和直接插入排序的元素移动次数是否相同?
  10. 哪个算法的元素移动次数与原始序列状态无关?

 回答

  1. 冒泡排序,没有发生交换时就比较一趟;直接插入排序,基本有序时。
  2. 希尔排序,堆排序,简单选择排序,快排。
  3. 希尔排序,当局部序列本来就有序时;三个简单排序;快速排序,顺序或逆序时。
  4. 堆排和简单选择排序;归并排序;基数排序
  5. 七个基于比较的排序中除了归并排序和快排外都是O(1);归并排序为O(n);快排平均O(logn),最坏为O(n);基数排序为O(r)
  6. 希尔排序和堆排序利用了随机访问特性,当使用链式存储时不适合用这两个算法。
  7. 交换类的算法,冒泡和快排其趟数与初始序列有关。
  8. 简单选择排序算法的比较次数与序列初始状态无关,始终为n(n-1)/2;归并排序的比较次数的数量级与序列状态无关。折半插入排序的比较次数与序列状态无关,直接插入排序有关。
  9. 相同。
  10. 基数排序

补充

  • n个关键字基于比较的排序, 比较次数至少为  ⌈ log2(n!) ⌉ 
  • 在建含n个元素的堆时,关键字的比较总次数不超过4n,时间复杂度为O(n)
  • 堆也支持插入操作,将新结点放在堆的末端,再对这个新结点向上执行调整操作。
  • n个结点的堆中插入或删除一个元素的时间复杂度为O(logn)
  • 通常,取一大堆数据中的K个最大(最小)元素时,都优先使用堆排序。

你可能感兴趣的:(408强化,排序算法,算法,数据结构)