算法入门第三课
题目一:
比较器的使用
1)比较器的实质就是重载比较运算符。
2)比较器可以很好的应用在特殊标准的排序上
3)比较器可以很好的应用在根据特殊标准排序的结构上
实现Comparator接口
重写compara()方法
题目二
桶排序思想下的排序
1)计数排序,词频统计(区间小适合)
2)基数排序(数据必须是十进制,最好是正数)
分析:
1)桶排序思想下的排序都是不基于比较的排序
2)时间复杂度为O(N),额外空间负载度O(M)
3)应用范围有限,需要样本的数据状况满足桶的划分
排序方式:
1)基于比较的排序(重要,范围广)
2)基于数据状况的(好处,时间复杂度好最好的程度O(N))
题目三:
排序算法的稳定性
排序算法的稳定性及其汇总
同样值的个体之间,如果不因为排序而改变相对次序,就是这个排序是有稳定性的;否则就没有。
不具备稳定性的排序:
选择排序、快速排序、堆排序
具备稳定性的排序:
冒泡排序、插入排序、归并排序、一切桶排序思想下的排序
目前没有找到时间复杂度0 (N*logN),额外空间复杂度0(1),又稳定的排序。
题目四:
常见的坑
1,归并排序的额外空间复杂度可以变成0(1),但是非常难,不需要掌握,有兴 趣可以搜“归并排序内部缓存法”
2, “原地归并排序”的帖子都是垃圾,会让归并排序的时间复杂度变成0 (N’ 2)3,快速排序可以做到稳定性问题,但是非常难,不需要掌握,可以搜 “01stable sort”
4,所有的改进都不重要,因为目前没有找到时间复杂度0 (N*logN),额外空间复 杂度0(1),又稳定的排序。
5,有一道题目,是奇数放在数组左边,偶数放在数组右边,还要求原始的相对 次序不变,碰到这个问题,可以怼面试官。
题目五:
工程上对排序的改进 (多种优势弄在一起)
1)充分利用O(N*logN)和O(N^2)排序各自的优势
2)稳定性的考虑
例如:
多少个数是适合那个方法就用那个排序。