排序算法
-
算法分类
非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。
稳定性的意义
当排序的内容是一个复杂对象的多个数字属性,且其原本的初始顺序存在意义,那么我们需要在二次排序的基础上保持原有排序的意义,才需要使用到稳定性的算法,例如:要排序的内容是一组原本按照价格高低排序的对象,如今需要按照销量高低排序,使用稳定性算法,可以使得相同销量的对象依旧保持着价格高低的排序展现,只有销量不同的才会重新排序。
- 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。包括:冒泡排序,插入排序、归并排序、基数排序等
- 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。选择排序、快速排序、希尔排序、堆排序等