几种排序算法的总结

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

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

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

                归并排序比堆排序还要快一点,所以比快排、希尔也要快。可是须要内存空间大,比堆排序须要多一倍的内存空间,由于须要一个额外的数组。数组

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

                快排是递归的,因此不适合内存很是有限的状况。spa

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

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

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

  • 8.总结:

排序法递归

 平均时间内存

最差情形ci

稳定度table

额外空间效率

备注

冒泡

 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大时较好

相关文章
相关标签/搜索