算法性能:十种常见排序算法时间效率直观对比

一、10算法分类

本文一共总结了10种排序算法,其中 

基于比较的排序算法有

冒泡排序,插入排序,希尔排序,选择排序,归并排序,堆排序,快速排序;

线性时间排序算法包括

计数排序,基数排序,桶排序;

 

前边有提到过,基于比较的排序算法,时间复杂度最差达到O(nlogn)O(nlogn),无法突破这个界限,只有线性时间排序能够突破,达到O(n)O(n),所以说,如果满足了线性时间排序算法的限制条件,使用线性时间排序将会使排序性能得到极大提升。

二、实际测试数据 

下面对以上涉及到的每种算法做一个简单的实际测试对比:利用随机数,随机生成区间0 ~ K之间的序列,共计N个数字,利用各种算法进行排序,记录排序所需时间,测试环境为i7+vs2015+Debug版本。

算法\输入数据N=50 K=50N=200 K=100N=500 K=500N=2000 K=2000N=5000 K=8000N=10000 K=20000N=20000 K=20000N=20000 K=200000
冒泡排序0ms15ms89ms1493ms9363ms36951ms147817ms143457ms
插入排序1ms13ms82ms1402ms8698ms34731ms134817ms134836ms
希尔排序0ms1ms6ms30ms110ms257ms599ms606ms
选择排序0ms5ms31ms461ms2888ms11736ms45308ms44838ms
堆排序0ms3ms9ms40ms124ms247ms525ms527ms
归并排序2ms6ms18ms75ms199ms392ms778ms793ms
快速排序0ms1ms2ms14ms36ms84ms196ms163ms
计数排序0ms1ms1ms5ms15ms32ms51ms62ms
基数排序0ms1ms4ms19ms47ms114ms237ms226ms
桶排序0ms2ms6ms25ms68ms126ms254ms251ms

三、性能对比小结

1. 传统简单排序确实当数据量很小的时候也表现不错,但当数据量增大,其耗时也增大十分明显; 

2. 冒泡,插入,选择三种排序中,当数据量很大时,选择排序性能会更好; 

3. 堆排,希尔,归并,快排几种排序算法也表现不错,源于其时间复杂度达到了O(nlogn)O(nlogn); 

4. 随机快速排序性能确实表现十分亮眼,甚至有时比基数排序和桶排序还好,这可能也是快排如此流行的原因; 

5. 线性排序中计数排序表现最好,但他们的限制也比较明显,只能处理范围内的正整数。

 

    原文作者:活的潇洒80
    原文地址: https://www.cnblogs.com/luoahong/p/9685904.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞