排序的时间复杂度(记忆帖)
排序的时间复杂度(记忆帖)
怕记不住
稳定的排序
时间复杂度 | 空间复杂度 | |
---|---|---|
冒泡排序 | 平均O(n2),最好O(n) | 1 |
插入排序 | 平均O(n2),最好O(n) | 1 |
归并排序 | O(nlogn) | O(n) |
桶排序 | O(n) | O(k) |
不稳定的排序
时间复杂度 | 空间复杂度 | |
---|---|---|
选择排序 | O(n2) | 1 |
希尔排序 | O(nlogn) | 1 |
堆排序 | O(nlogn) | 1 |
快速排序 | 平均O(nlogn), 最差O(n2) | O(logn) |
附:
1、在第一次排序后,一定能把数据中最大或最小元素放在最终位置上的排序算法是 :冒泡排序、选择排序、堆排序
2、稳定排序与不稳定排序
- 存在多个关键字相同的记录,如果排序后,这些相同的关键字的相对次序保持不变,则该方法是稳定的
- 反之,不稳定
3、就地排序,排序的空间复杂度为1的排序,有:插入排序、冒泡排序、选择排序、堆排序、希尔排序
4、就平均性能而言,快速排序最快
5、如果要求在排序的数组(或者部分排序的数组中),查找一个数字或统计某个数字出现的次数,都可以尝试使用二分查找。
6、实战:要对公司员工的年龄排序。要求O(n),空间复杂度O(n)。就可以用桶排序实现。
7、100G的数据,只有2G内存,怎么排序?
- 用归并排序。当出现数据没办法一次装入内存的情况时,一般采用外部排序。将100G的数据分解为多个能够一次性装入内存中的小部分。然后分别把每一个小部分排序,最后对每一个小部分进行归并排序。
注:学渣心里苦,不要学楼主,平时不努力,考试二百五,哭 ~