排序的稳定性:
在排序的过程中,相等的数的顺序不会被改变
(1)三个O(n^2)的排序算法:冒泡排序、插入排序、选择排序
冒泡和插入都可以实现稳定性,但是选择排序无法实现稳定性
(2)O(n*logn)的排序算法:归并排序、快排、堆排
归并可以,快排(普通)和堆排不可以
在工程中的综合排序:
(1)先判断数组中的类型
(2)如果数组中的是基础类型(byte,char,short,int,float,double,long),就会用快排
(不用考虑数的先后顺序,相同数据没差异)
(3)如果数组中的是类型是类中的某个字段,那么系统就会用堆排
(要考虑每个的先后顺序,相同数据有差异)
(4)如果数组长度<60,就会使用插入排序,O(n^2)还是很小,所以插入排序很快
看了左神的视频,左神讲的有关排序问题的补充:
(1)归并排序的额外空间复杂度可以变成O(1),但是非常难,不需要掌握,可以搜“归并排序 内部缓存法”
(2)快速排序可以做到稳定性问题,但是非常难,不需要掌握,可以搜“01 stable sort”
(3)有一道题目,是奇数放在数组左边,偶数放在数组右边,还要求原始数组的相对次序不变,碰到这个问题,可以怼面试官。面试官非良人。