考研408总结【数据结构】---排序(上)

448 阅读3分钟

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

考研倒计时:35天

参考资料: 王道数据结构考研复习指导 天勤数据结构高分笔记

对于排序,主要分为内部排序和外部排序。

本篇主要总结内部排序的知识点。

对于任意n个关键字排序的比较次数至少为log2(n!)\lceil log_2(n!) \rceil

插入排序

插入排序有直接插入排序、折半插入排序、希尔排序

需要注意的tip:

  • 折半插入排序不适用于链表
  • 直接插入排序比较次数和移动次数都取决于排序表的初始状态,最好情况(元素有序)时间复杂度为O(n)O(n),最坏情况是逆序。所以平均时间复杂度为n2n^2,稳定的算法。【判别特点:局部有序】
  • 折半插入排序仅减少了比较元素的个数,该比较次数与排序表的初始状态无关,取决于元素个数,而元素的移动次数并未改变,依赖于排序表的初始状态。平均时间复杂度为n2n^2,稳定的算法。
  • 希尔排序,不稳定,仅适用于线性表为顺序存储的情况。熟悉不同增量的排序过程!(真题常出现)

【2018年408】 image.png

点击查看答案D

交换排序

交换排序有冒泡排序、快速排序

需要注意的tip:

  • 冒泡结果序列最小或最大放置到最终位置。最好情况有序的时候,时间复杂度为O(n)O(n),最坏的情况逆序,所以平均时间复杂度为n2n^2,稳定的算法。【判别特点:有序子序列全局有序】
  • 快速排序是所有内部排序平均性能最优的算法。不稳定,空间最好为log2nlog_2n,最差为O(n)O(n),如果有序或逆序,时间复杂度最坏为n2n^2,平均为nlog2nnlog_2n。【判别特点:基准元素放在最终位置】
  • 快排递归次数与初始数据的排列次序有关。 对于快排,选择题有个小tip,可以先写出已排序序列进行比较判断。

【2010年408】 image.png

点击查看答案A

选择排序

选择排序有简单选择排序和堆排序

需要注意的tip:

  • 移动次数很少,最好为0次,此时已有序;移动次数不会超过3(n-1),比较次数与序列的初始状态无关,始终是n*(n-1)/2,因此时间复杂度为n2n^2。不稳定
  • 堆排序,建堆时间为O(n),调整堆的时间为树高,最好最坏平均均为nlog2nnlog_2n,不稳定。空间复杂度为O(1)。
  • 可将堆视为完全二叉树。

对于堆排序,解题通常画树来解决。

只需得到前k小元素的顺序排序可采用:冒泡、堆排序、简单选择排序。

【2018年408】 image.png

点击查看答案A

归并排序

  • 空间复杂度为O(n),占用辅助空间最多
  • 时间复杂度为nlog2nnlog_2n,稳定,比较次数与序列的初始状态无关。
  • k路归并,趟数m为m=logkN\lceil log_kN \rceil

基数排序

基数排序就不基于比较。有最高位优先MSD和最低位优先LSD。

按照个位、十位的顺序...分配和收集即可。

与序列的初始状态无关。稳定。

图片来源:一像素 image.png


部分内容待补充完善~

如有误,请多指正!