请介绍一下常用的排序算法及其复杂度

匿名网友 匿名网友 发布于: 2015-09-16 00:00:00
阅读 176 收藏 0 点赞 0 评论 0

1.选择排序

对于长度为N的数组,选择排序大约~N^2/2次比较N次交换

特点:

  • 运行时间和输入无关,主键全部相等的数组和一个元素随机排序的数组所用的时间一样长。
  • 数据移动是最少的,交换次数和数组的大小是线性关系,我们将研究的其他算法都不具备这个特征(大部分都是线性对数或是平方级别)

总结:

  • 稳定性:否
  • 原地排序:是

2.插入排序

对于随机排序的长度为N且主键不重复的数组,平均情况下需要~N^/4次比较以及~N^2/4次交换。最坏情况下需要~N^2次比较和~N^2次交换,最好情况下需要N-1次比较和0次交换

特点:

  • 运行时间取决于输入元素的初始顺序,如果对一个有序数组进行排序,会立即发现每个元素都已经在合适的位置上,它的运行时间是线性的。

总结:

  • 稳定性:是
  • 是否原地排序:是

3.希尔排序(插入排序的改进)

可以用于大型数组(可能比快排慢2倍,但是实现简单),对任意排序的数组表现也很好

总结:

  • 稳定性:否
  • 原地排序:是

4.归并排序

1.对于长度为N的任意数组,自顶向下的归并排序需要1/2NlgN至NlgN次比较 2.对于长度为N的任意数组,自顶向下的归并排序最多需要访问数组6NlgN次 1、2-》归并排序所需的时间和NlgN成正比 3.对于长度为N的任意数组,自底向上的归并排序需要1/2NlgN至NlgN次比较,最多访问数组6NlgN次

总结:

  • 稳定性:是
  • 原地排序:否

5.快速排序

1.将长度为N的无重复数组排序,快速排序平均需要~2NlnN次比较(以及1/6的交换) 2.快速排序最多需要约N^2/2次比较,但随机打乱数组可以预防这种情况。

总结:

  • 稳定性:否
  • 原地排序:是

6.堆排序

将N个元素排序,堆排序只需少于(2NlgN+2N)次比较(以及一半次数的交换)

总结:

  • 稳定性:否
  • 原地排序:是

时间复杂度总结表

on

评论列表
文章目录