版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lishang6257/article/details/83026135
1 概述
排序算法在算法中占据了一席之位,常见的一共有十种(<<简单插入排序,希尔排序>,归并排序,<简单选择排序,堆排序>,<快速排序,冒泡排序>>,<计数排序,基数排序,桶排序>),本文将将从理论出发一窥排序算法真容。
2 基本问题与重要概念
本文最开始先介绍排序算法中几个概念:
- 原址性:在排序的任何时候,任何规模下,只需要常数个额外的地址空间存储临时数据
- 稳定性:相同元素在原序列中的相对次序和在排序后的序列中的相对位置保持不变
- 比较排序与比较排序:比较排序借助比较两个元素的关键字大小关系来确定相对次序;否则为非比较排序
接着就可以指出内部排序算法关注较多的几个点
- 时间复杂度
在多数的应用场景中,往往希望尽可能快的完成排序。分析数据的特征和需求的最低速度,合理选择算法 。
另一方面,比较排序算法的时间复杂度的下确界为 ,渐进最优的排序算法是需要关注的 - 空间复杂度
鱼与熊掌通常不可兼得,时间消耗与空间消耗总是在制衡中需找平衡点,在追求飞速排序时,需要注意空间消耗。自然最理想的就是上文提及的原址性,只需 的空间复杂度 - 稳定性
实际应用会提出键值相同的两个元素在排序过程中相对次序不发生改变,这就要选择稳定的排序。
3 宏观结论
ctex的表格表示太麻烦了,这边直接放截图了,excel文件链接我放在文章结尾。