任何相同的值,在排序之后,保持原本的相对次序不变。
选择排序,做不到稳定性
冒泡、选择、插入(O(n2))
归并排序:稳定性
快排:做不到稳定性(论文级别的难度的)
堆排:做不到稳定性
O(NlogN)
证明难,举反例
追求稳定性的意义:在实际业务中,希望在一次排序后,不抹去原有序列的信息,比如下例。先按照身高排序,再按照年龄排序,稳定性的排序算法可以保证“幺”和“小明”身高信息相对序列不发生改变,但非稳定算法无法保证这一点。
计算机科学是肥常实用的科学,哈哈哈哈。
综合排序算法:
小样本:插排 <60(常数项低)
从稳定性出发的:
基础类型用快排
自定义类用归排
有关排序问题的补充:
归并排序内部缓存法,额外空间复杂度可以变为O(1)
原地归并排序:傻逼!
快排:01 stable sort 稳定性
0/1标准
奇数在左边,偶数在右边
怼面试官
O(1)/O(N),稳定性,不存在?
荷兰国旗问题做不到稳定性
让你的思维被喜欢!
比较器:
重载运算符
c++:重载运算符或compare方法
优先级队列就是堆
(有序结构)红黑树:比较器,lamada表达式?
桶排序:计数排序、基数排序:不是基于比较的排序,与被排序样本的数据情况相关
O(N)、O(N),数与索引相对应,用桶
采用桶的思想,不许用非比较型的排序算法,实现O(N)的排序,并计算相邻数的最大值
为什么不找空桶的两侧:
空桶是杀死max发生在一个桶内的可能性!
当婊子,不要立牌坊