一 、排序算法按时间复杂度分类
- 平方阶:选择排序,插入排序,冒泡排序
- 对数阶:归并排序,快速排序,堆排序
- O(n^(1+t))阶,t介于0~1之间:希尔排序
- 线性阶:桶排序
二、排序算法按是否稳定分类
(稳定是指,相同的元素排序后是否能保持排序前的前后顺序)
- 稳定的排序:插入排序,冒泡排序,归并排序,桶排序
- 不稳定的排序:选择排序,快速排序,堆排序,希尔排序
注:可以理解为,如果需要长距离(中间隔很多元素)交换,而不是左右交换的都是不稳定排序,因为,这样有可能将相等的大数本是前面的换到后面去。
三、排序算法使用场景
- 若 n 较小(n <=50),采用插入排序或者选择排序
当记录较少,直接插入排序即可,或者若想移动次数少些,用选择排序(移动次数少,但必须遍历,插入不需要) - 若记录基本有序,采用插入排序或者冒泡排序
- 若 n 较大,用对数阶排序
快速排序认为效果最好,时间效率最高。
归并排序不提倡从单个记录开始两两归并,而是先用插入排序排好两个一定长度的序列后归并。
四、排序相关题目
- 基本算法练习:平方阶、对数阶、希尔排序基本实现
- 特定排序应用和其他概念:
(1) 归并排序应用—数组中逆序对【剑指offer36】
(2) 堆排序应用—最小k个数【剑指offer30】、优先队列问题
(3) 桶排序应用—MaximumGap【leetcode164】
(4) 快排应用按条件整理数组数据—按奇数偶数分割数组【剑指offer14】、整理颜色【leetcode75】 - 其他应用排序题目:
(1) 排序+模拟:判断扑克牌顺子【剑指offer44】
(2) 排序+策略:组成最小数字【剑指offer33】、组成最大数字【leetcode179】
(3) 排序应用:归并区间【leetcode57】 - 大数据排序—磁盘文件排序

292

被折叠的 条评论
为什么被折叠?



