几种排序算法的总结

  • 1.冒泡排序:简单的排序算法,时间复杂度O(n^2),对少量排序有效,排序效率最低,需要一趟一趟对比,一般作为其他排序算法的对比。
  • 2.插入排序:插入排序是对冒泡排序的改进,比冒泡快两倍,一般用于数据量不大于1000,或者重复排序超过200,或者部分已经排序的序列。
  • 3.希尔排序:希尔排序是将数据分成几组,每组之内在进行插入排序,最后对所有数据进行一次插入排序,以减少数据交换和移动次数。平均效率O(n*logn)。

                希尔排序比冒泡排序快5倍,比插入排序快约2倍,比快排、归并排序、堆排序慢很多。适合数据量不大于5000,速度不是特别重要的场合。对数据量较小的数列重复排序是非常好的。

  • 4.选择排序:时间复杂度O(n^2),与冒泡排序都是排序算法的初级阶段,应用中较少使用。
  • 5.归并排序:先分解要排序的序列,直到只有一个组的时候,再一次合并。时间复杂度O(n*logn)。

                归并排序比堆排序还要快一点,因此比快排、希尔也要快。但是需要内存空间大,比堆排序需要多一倍的内存空间,因为需要一个额外的数组。

  • 6.快速排序:快排是一个就地排序,分而治之,大规模递归的排序。一般情况下,快排比大部分排序算法都要快。某些情况下部分排序算法比快排快,但就通常意义上说快排就是快。

                快排是递归的,所以不适合内存非常有限的情况。

  • 7.堆排序:堆排序会将所有数据建成一个堆,时间复杂度O(n*logn)。

              堆排序不需要大量递归或者多维数组暂存数据,适合数据量非常巨大的序列,快排、归并都需要递归来设计算法,数据量非常大的时候,容易发生堆栈溢出。 

              堆排序适合大量数据排序,百万级别,特别是在大量数据中找出前N大或前N小的排序。一般找出前N大,需要用小堆;找出前N小,需要用大堆。

  • 8.总结:

排序法

 平均时间

最差情形

稳定度

额外空间

备注

冒泡

 O(n2)

  O(n2)

 稳定

O(1)

n小时较好

交换

  O(n2)

  O(n2)

不稳定

O(1)

n小时较好

选择

 O(n2)

 O(n2)

不稳定

O(1)

n小时较好

插入

 O(n2)

 O(n2)

稳定

O(1)

大部分已排序时较好

基数

O(logRB)

O(logRB)

稳定

O(n)

B是真数(0-9)R是基数(个十百)

Shell

O(nlogn)

O(ns) 1<s<2

不稳定

O(1)

s是所选分组

快速

O(nlogn)

O(n2)

不稳定

O(nlogn)

n大时较好

归并

O(nlogn)

O(nlogn)

稳定

O(1)

n大时较好

O(nlogn)

O(nlogn)

不稳定

O(1)

n大时较好

posted @ 2013-08-05 09:30  风风清清扬扬  阅读(359)  评论(0编辑  收藏  举报