• 各种排序算法比较


     

    各种常用排序算法

    类别

    排序方法

    时间复杂度

    空间复杂度

    稳定性

    复杂性

    特点

    最好

    平均

    最坏

    辅助存储

     

    简单

     

    插入

    排序

    直接插入

    Insert

    O(N)

    O(N2)

    O(N2)

    O(1)

    稳定

    简单 

     

    希尔排序

    Shell

    O(N)

    O(N1.3)

    O(N2)

    O(1)

    不稳定

    复杂

     

    选择

    排序

    直接选择

    Select

    O(N)

    O(N2)

    O(N2)

    O(1)

    不稳定

     

     按理说平均复杂度和最坏复杂度相同是稳定排序。但是:序列5 8 5 2 9,第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。

    堆排序

    Heap

    O(N*log2N)

    O(N*log2N)

    O(N*log2N)

    O(1)

    不稳定

    复杂

     堆排序跟直接选择类似

    交换

    排序

    冒泡排序

    Buble

    O(N)

    O(N2)

    O(N2)

    O(1)

    稳定

    简单

    1、冒泡排序是一种用时间换空间的排序方法,n小时好
    2、最坏情况是把顺序的排列变成逆序,或者把逆序的数列变成顺序,最差时间复杂度O(N^2)只是表示其操作次数的数量级
    3、最好的情况是数据本来就有序,复杂度为O(n)

    快速排序

    Quick

    O(N*log2N)

    O(N*log2N) 

    O(N2)

    O(log2n)~O(n) 

    不稳定

    复杂

    1、n大时好,快速排序比较占用内存,内存随n的增大而增大,但却是效率高不稳定的排序算法。
    2、划分之后一边是一个,一边是n-1个,
    这种极端情况的时间复杂度就是O(N^2)
    3、最好的情况是每次都能均匀的划分序列,O(N*log2N)

    归并排序

    Merge

    O(N*log2N) 

    O(N*log2N) 

    O(N*log2N) 

    O(n)

    稳定

    复杂

    1、n大时好,归并比较占用内存,内存随n的增大而增大,但却是效率高且稳定的排序算法。

    基数排序

    Radix

    O(d(r+n))

    O(d(r+n))

    O(d(r+n))

    O(rd+n)

    稳定

    复杂

     

    注:r代表关键字基数,d代表长度,n代表关键字个数

     

    注:

    1、归并排序每次递归都要用到一个辅助表,长度与待排序的表长度相同,虽然递归次数是O(log2n),但每次递归都会释放掉所占的辅助空间,

    2、快速排序空间复杂度只是在通常情况下才为O(log2n),如果是最坏情况的话,很显然就要O(n)的空间了。当然,可以通过随机化选择pivot来将空间复杂度降低到O(log2n)。

    古有内事不决问张昭,外事不决问周瑜; 今有生活不懂问百度,学术不懂问谷歌。 (SunQuan)The inner undecided ask ZhangZhao, the outer undecided ask ZhouYu. (I)Life unknown ask Baidu, academic unknown ask Google.
  • 相关阅读:
    【算法18】重排数组元素使得所有的奇数位于所有偶数之前
    php函数ob_start()、ob_end_clean()、ob_get_contents()
    php代码调试
    判断文件存在是用file_exists 还是 is_file
    ubuntu屏幕截图工具:scrot,可截鼠标拖曳的矩形区域图形
    mysql常用的技巧
    用户角色权限设计
    解决ubuntu耳机和音箱同时发音
    SSH免密码登录
    IE, Firefox下,checkbox的钩钩一旦勾上,画面再刷新,钩钩还是勾上的解决方案
  • 原文地址:https://www.cnblogs.com/luoyanghero/p/6666605.html
Copyright © 2020-2023  润新知