408强化(六)排序算法
企业开发
2023-10-02 23:21:11
阅读次数: 0
问题
- 哪两个算法最好时间复杂度为O(n)?
- 哪四个算法是不稳定的?
- 哪五个算法最坏时间复杂度是O()?假设希尔排序使用希尔增量序列
- 哪四个算法的最好,最坏,平均时间复杂度都相同?
- 说明一下八个排序算法的空间复杂度?
- 哪些算法需要利用顺序存储?
- 哪些算法趟数与原始序列状态有关?
- 哪些算法的比较次数与原始序列状态无关?
- 折半插入和直接插入排序的元素移动次数是否相同?
- 哪个算法的元素移动次数与原始序列状态无关?
回答
- 冒泡排序,没有发生交换时就比较一趟;直接插入排序,基本有序时。
- 希尔排序,堆排序,简单选择排序,快排。
- 希尔排序,当局部序列本来就有序时;三个简单排序;快速排序,顺序或逆序时。
- 堆排和简单选择排序;归并排序;基数排序
- 七个基于比较的排序中除了归并排序和快排外都是O(1);归并排序为O(n);快排平均O(logn),最坏为O(n);基数排序为O(r)
- 希尔排序和堆排序利用了随机访问特性,当使用链式存储时不适合用这两个算法。
- 交换类的算法,冒泡和快排其趟数与初始序列有关。
- 简单选择排序算法的比较次数与序列初始状态无关,始终为n(n-1)/2;归并排序的比较次数的数量级与序列状态无关。折半插入排序的比较次数与序列状态无关,直接插入排序有关。
- 相同。
- 基数排序。
补充
- n个关键字基于比较的排序, 比较次数至少为 ⌈ log2(n!) ⌉
- 在建含n个元素的堆时,关键字的比较总次数不超过4n,时间复杂度为O(n)
- 堆也支持插入操作,将新结点放在堆的末端,再对这个新结点向上执行调整操作。
- n个结点的堆中插入或删除一个元素的时间复杂度为O(logn)
- 通常,取一大堆数据中的K个最大(最小)元素时,都优先使用堆排序。
转载自blog.csdn.net/weixin_74059671/article/details/129883329