1.分类
基于插入的
- 直接插入排序
- 折半插入排序
- 希尔排序
基于交换的
- 冒泡排序
- 快速排序
基于选择的
- 简单选择排序
- 堆排序
时间复杂度 | 空间复杂度 | 稳定性 | 适用性 | |||
最好 | 平均 | 最坏 | ||||
直接插入 | n | n² | n² | 1 | √ | 顺序存储/链式存储 |
冒泡 | n | n² | n² | 1 | √ | 顺序存储/链式存储 |
简单选择 | n² | n² | n² | 1 | × | 顺序存储/链式存储 |
希尔 | 1 | × | 顺序存储 | |||
快排 | nlogn | nlogn | n² | nlogn | × | 顺序存储 |
堆排序 | nlogn | nlogn | nlogn | 1 | × | 顺序存储 |
二路归并 | nlogn | nlogn | nlogn | n | √ | 顺序存储/链式存储 |
基数排序 | d(n+r) | d(n+r) | d(n+r) | r | √ | 顺序存储/链式存储 |
2.零碎的知识点
- 对任意n个关键字进行基于比较的排序,比较次数至少为多少?log(n!)(向上取整)
- 折半插入时间复杂度是多少?O(n²)
- 快排的空间复杂度最坏是多少?O(n)
- 基数排序中,队列个数等于什么?进制数
3.关于并行执行
能并行执行 | 不能并行执行 |
---|---|
归并排序(各归并段可以并行) | 基数排序(每一趟需要利用前一趟已经排好的序列) |
快速排序(每一趟的两个子序列可以并行) | 冒牌排序(每一趟仅对未排序的元素处理) |
堆排序(左右子树可以并行) |
4.与初始状态有关/无关
元素移动次数与关键词的初始排列次序
无关 | 有关 |
---|---|
归并排序 | 直接插入排序(初始有序,移动0,初始逆序,移动最多) |
基数排序 | 冒泡排序(初始有序,移动0,初始逆序,移动最多) |
快速排序(初始基本有序或基本逆序为最坏情况) |
排序趟数与序列的原始状态
无关 | 有关 |
---|---|
基数排序(d趟) | 冒泡排序(本趟无交换,排序完成) |
简单选择排序(n-1趟) | 快速排序 |
直接插入(n-1趟) |
关键词的比较次数与初始排列
无关 | 有关 |
---|---|
折半排序 | 直接插入 |
简单选择(n(n-1)/2) | 快速排序 |
归并 | 冒泡排序 |