十大排序算法原理及实现

算法概述

  1. 冒泡排序及其优化
  2. 快速排序及其优化
  3. 直接插入排序及其优化
  4. 希尔排序及其误区明析
  5. 直接选择排序
  6. 堆排序
  7. 归并排序
  8. 计数排序
  9. 桶排序
  10. 基数排序

算法分类

十种常见排序算法可以分为两大类:

  • 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序
  • 线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 

根据使用内外存分类

排序分为内部排序外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。八大排序指内部排序

算法复杂度

相关概念

  • 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
  • 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
  • 时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
  • 空间复杂度是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。

1、为什么比较排序算法的时间下界是O(nlogn)?

  • 所谓的比较排序是指通过比较来决定元素间的相对次序。
  • “定理:对于含n个元素的一个输入序列,任何比较排序算法在最坏情况下,都需要做Ω(nlgn)次比较。”也就是说,比较排序算法的运行速度不会快于nlgn,这就是基于比较的排序算法的时间下界。

决策树,图中1,2,3代表下标

  • 通过决策树(Decision-Tree)可以证明这个定理,决策树的叶子代表可能的排序结果,则树的高度就是比较排序的最多比较次数,n个元素的二叉决策树有n!个不重复叶子节点(每个叶子结点代表一个排序结果,可能的排序结果是n的排列组合,故有n!个),n!个叶子节点的二叉树的高度h=Ω(nlogn)

在这里插入图片描述

  • 根据上面的证明,我们知道任何比较排序算法的运行时间不会快于nlgn。那么我们是否可以突破这个限制呢?当然可以,接下来我们将介绍三种线性时间的排序算法,它们都不是通过比较来排序的,因此,下界O(nlogn)对它们不适用。
  • 分别是计数排序(Counting Sort)(O(n+k))、桶排序(Bucket Sort)(O(n+k))和基数排序(Radix Sort)(O(n*k))

猜你喜欢

转载自blog.csdn.net/qq_35683407/article/details/106064918