排序算法的时间复杂度:【O(nn)选择、冒泡、插入】【O(NlogN)快速、归并、堆、希尔】【O(N)计数、基数】
排序算法空间复杂度:【O(1)选择、冒泡、插入、堆、希尔】【O(logN)~O(N)快速排序 O(N)归并排序】【O(M)计数、基数(M为桶的数量)】
排序算法稳定性:选择排序(不稳定),冒泡排序(稳定),插入排序(稳定),快速排序(不稳定),归并排序(稳定),堆排序(不稳定),希尔排序(不稳定),桶排序(稳定),计数排序(稳定),基数排序(稳定)
稳定性的意义:在具体的业务场景中,需要保留后面的原始次序。比如 姓名 班级 分数 先按照分数进行排序,然后按照班级进行排序,想要按照班级排序后,原顺序保持一次,才能对应上自己的分数。
综合的排序方式,会先检查数组中的数据是基础类型,会用快速排序;数据是引用类型,会用归并排序。如果数组长度很短直接用插入排序。一般数组中60个数用插排,主要是常数项很低,小样本量体现不出算法复杂度的劣势。先用快排,或者归并排序,当小样本量达到60后,直接用插排。
// 1、选择排序
public