• 综合8种子排序算法总结和比较


    1 高速分拣(QuickSort)

    高速的排序是一个地方排序,分而治之。海量递归算法。从本质上讲,合并排序地方是版本号。

    的以下四个步骤的高速排序可以由。

    (1) 不多于1个数据。直接返回。

    (2) 一般选择序列最左边的值作为支点数据。

    (3) 将序列分成2部分。一部分都大于支点数据,另外一部分都小于支点数据。

    (4) 对两边利用递归排序数列。

    高速排序比大部分排序算法都要快。

    虽然我们能够在某些特殊的情况下写出比高速排序快的算法,可是就通常情况而言。没有比它更快的了。高速排序是递归的,对于内存很有限的机器来说,它不是一个好的选择。

    2 归并排序(MergeSort)

    归并排序先分解要排序的序列,从1分成2。2分成4,依次分解,当分解到仅仅有1个一组的时候,就能够排序这些分组,然后依次合并回原来的序列中。这样就能够排序全部数据。合并排序比堆排序略微快一点,可是须要比堆排序多一倍的内存空间。由于它须要一个额外的数组。

    3 堆排序(HeapSort)

    堆排序适合于数据量很大的场合(百万数据)。

    堆排序不须要大量的递归或者多维的暂存数组。

    这对于数据量很巨大的序列是合适的。比方超过数百万条记录。由于高速排序,归并排序都使用递归来设计算法,在数据量很大的时候。可能会发生堆栈溢出错误。

    堆排序会将全部的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆。交换数据,依次下去,就能够排序全部的数据。

    4 Shell排序(ShellSort)

    Shell排序通过将数据分成不同的组。先对每一组进行排序,然后再对全部的元素进行一次插入排序。以降低数据交换和移动的次数。平均效率是O(nlogn)。当中分组的合理性会对算法产生重要的影响。

    如今多用D.E.Knuth的分组方法。

    Shell排序比冒泡排序快5倍,比插入排序大致快2倍。Shell排序比起QuickSort,MergeSort。HeapSort慢非常多。可是它相对照较简单,它适合于数据量在5000下面而且速度并非特别重要的场合。它对于数据量较小的数列反复排序是非常好的。

    5 插入排序(InsertSort)

    插入排序通过把序列中的值插入一个已经排序好的序列中,直到该序列的结束。插入排序是对冒泡排序的改进。它比冒泡排序快2倍。一般不用在数据大于1000的场合下使用插入排序,或者反复排序超过200数据项的序列。

    6 冒泡排序(BubbleSort)

    冒泡排序是最慢的排序算法。

    在实际运用中它是效率最低的算法。它通过一趟又一趟地比較数组中的每个元素。使较大的数据下沉,较小的数据上升。

    它是O(n^2)的算法。

    7 交换排序(ExchangeSort)和选择排序(SelectSort)

    这两种排序方法都是交换方法的排序算法。效率都是 O(n2)。在实际应用中处于和冒泡排序基本同样的地位。它们仅仅是排序算法发展的0基础阶段。在实际中使用较少。

    8 基数排序(RadixSort)

    基数排序和通常的排序算法并不走相同的路线。

    它是一种比較新颖的算法,可是它仅仅能用于整数的排序,假设我们要把相同的办法运用到浮点数上。我们必须了解浮点数的存储格式。并通过特殊的方式将浮点数映射到整数上,然后再映射回去,这是很麻烦的事情。因此。它的使用相同也不多。

    并且。最重要的是。这样算法也须要较多的存储空间。

    9 总结

    以下是一个总的表格。大致总结了我们常见的全部的排序算法的特点。

    排序法

     平均时间

    最差情形

    稳定度

    额外空间

    备注

    冒泡

     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(logrd)

    O(logrd)

    稳定

    O(n)

    d是keyword项数(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大时较好

    版权声明:本文博主原创文章。博客,未经同意不得转载。

  • 相关阅读:
    【sklearn文本特征提取】词袋模型/稀疏表示/停用词/TF-IDF模型
    【新人赛】阿里云恶意程序检测 -- 实践记录10.13
    【sklearn朴素贝叶斯算法】高斯分布/多项式/伯努利贝叶斯算法以及代码实例
    【sklearn决策树算法】DecisionTreeClassifier(API)的使用以及决策树代码实例
    【笔记】机器学习
    【笔记】机器学习
    【笔记】机器学习
    【笔记】机器学习
    【笔记】机器学习
    java架构师学习路线-漫谈分布式服务框架
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/4865102.html
Copyright © 2020-2023  润新知