一.排序相关概念:
稳定性: 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序仍然不变,则称这排序算法是稳定的,否则称为不稳定的。
内部排序: 数据元素全部放在内存中的排序。
外部排序: 不断在内外存之间移动数据的排序。
二.常见排序
1.直接插入排序
基本原理:每次都将排序中的元素,插入到前面已经排好序的有序序列中去,直到排序完成。这与斗地主习惯性整理排面的原理是一样的。
时间复杂度为O(n^2)。
2.简单选择排序
基本原理:每一趟从待排序的数据元素中选出最小(最大)的元素,顺序放在待排序的数列最前,直到全部待排序的数据元素全部排完。
时间复杂度为O(n^2)
简单选择排序的结果是不稳定的,原因在于算法采用的“交换记录”的策略,通过改变这种策略,是可以写出稳定的选择排序算法的。
3.堆排序
堆排序的总结这篇博客写的挺好理解的(感觉自己学不到家就不乱写了)。
参考文献:https://www.cnblogs.com/chengxiao/p/6129630.html
4.冒泡排序
基本原理:每次遍历完序列都把最大(小)的元素放在最前面,然后再对剩下的序列重复前面的一个过程,每次遍历完之后待排序序列就少一个元素,当待排序序列减小为只有一个元素的时候排序就结束了。
时间复杂度:O(n^2)
时间复杂度:快速排序在最坏的情况下,仍可能是相邻的两个数进行交换,因此快速排序最坏情况下将退化为O(n^2),平均时间复杂度为O(nlog2n)
快排的优点在于数据移动少,当n较大时,在平均情况下是所有内部排序算法中最快的,但缺点是不稳定,且较难应用于链式结构。
6.归并排序
基本原理:这篇文章就讲的特别好,强烈建议大家看看!https://www.ituring.com.cn/book/miniarticle/62897
时间复杂度:O(nlog2n)
归并排序多用于需要外部排序的场景。除此之外当n较大时并且需要保证稳定性的内部排序也可以采用归并排序(不要求稳定性的内部排序一般采用快排)。