zoukankan      html  css  js  c++  java
  • 十大排序

    比较排序:

    冒泡:两两交换

    选择:选择末序列最大(最小)值,同对应位置交换

    插入:从后往前扫描有序序列

    希尔排序:又叫做缩小增量排序,希尔增量:n/2 n/4   ... 1,O(n^2),Hibbard增量:1,3,7,2hk-1,O(n^1.5);下界为O(nlog(2n))

    非比较排序:

    桶排序:N个待排数据,M个桶,平均每个桶[N/M]个数据的桶排序平均时间复杂度为:O(N)+O(M*(N/M)*log(N/M))=O(N+N*(logN-logM))=O(N+N*logN-N*logM)

        即:平均时间复杂度为线性的O(N+C),其中C=N*(logN-logM)。如果相对于同样的N,桶数量M越大,其效率越高,最好时间复杂度达到O(N)。当然桶排序的空间复杂度为O(N+M),如果输入数据非常庞大,而桶的数量也非常多,则空间代价无疑是昂贵的。此外,桶排序是稳定的。 

    基数排序:n个待排数据,d个关键码,关键码取值范围radix,则时间复杂度:O(d*(n+radix))

    总结

    冒泡排序是基础,每轮遍历将“最大元素”移至正确位置(“最右边”),不稳定的O(n^2);

    选择排序要了解,选择排序每轮遍历将“最小(大)元素”移至正确位置(“最左(右)边”),稳定的O(n^2);

    插入排序最简单,适合数据量较小的排序,依然是O(n^2);

    希尔排序是插入排序升级版,不好用,为O(nlog^2n);

    归并排序和快速排序要熟记原理并会写代码。时间复杂度都是O(nlogn),前者不稳定,后者稳定。最常用的排序方法。

    堆排序代码复杂,不太好理解,也不好用,为O(nlogn)。

    计数排序、桶排序、基数排序都不是比较排序,可以归为一类,对数据有特殊的要求。其中计数排序是基础,类似建立map对应;桶排序将数据的大小分到不同的桶中,桶内再微小排序;基数排序则是多次的桶排序,每次桶排序根据对应数位将数据分到不同桶中。

    转载自:https://www.cnblogs.com/AlvinZH/p/8677814.html

  • 相关阅读:
    XML WebService完全实例详细解析
    List (Java 2 Platform SE 5.0)
    frameset
    关于在outlook2007里面编辑签名的问题
    关于javax.servlet.Http.*;不能被引用的问题
    select标签HTML,刚做地。
    UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
    玩转UICollectionViewLayout
    常用公共方法
    cell嵌套UIWebView遇到的几个问题
  • 原文地址:https://www.cnblogs.com/yvlian/p/11382101.html
Copyright © 2011-2022 走看看