常见的排序算法——总结(待完成)
最近总结了以下排序算法:
- 插入排序:直接插入排序,希尔排序
- 交换排序:冒泡排序,快速排序(挖坑法,前后指针法,左右指针法)
- 选择排序:直接选择排序,堆排序
- 归并排序
所以想对这些排序算法再做一个对比。
一、理论值对比
(参考:https://www.cnblogs.com/angelye/p/7508292.html 这篇总结了各种排序算法的实现思想,也是我自己需要完善的地方)
| 排序法 | 最差时间分析 | 平均时间复杂度 | 稳定度 | 空间复杂度 | 
| 冒泡排序 | O(n2) | O(n2) | 稳定 | O(1) | 
| 快速排序 | O(n2) | O(n*log2n) | 不稳定 | O(log2n)~O(n) | 
| 选择排序 | O(n2) | O(n2) | 不稳定 | O(1) | 
| 二叉树排序 | O(n2) | O(n*log2n) | 不一顶 | O(n) | 
| 插入排序 | O(n2) | O(n2) | 稳定 | O(1) | 
| 堆排序 | O(n*log2n) | O(n*log2n) | 不稳定 | O(1) | 
| 希尔排序 | O | O | 不稳定 | O(1) | 
(希尔排序可以参考这篇:http://www.cnblogs.com/skywang12345/p/3597597.html)
二、运行时间对比
归并排序:O(nlog2n)
实验了各种排序算法需要的运行时间:
2000个元素时:

20000个元素时:

50000个元素时:

100000个元素时:
 
从上面结果可以看出:直接插入排序(direct_insert)、直接选择排序(select_direct)、冒泡排序(bubble)耗时随着数据量的增加,耗时增加的非常快。
接下来,我们再来对比其他几种排序算法的耗时:
200000个元素:

500000个元素:

1000000个元素:
 
2000000个元素:

10000000个元素:

从上面的结果可以看出来:快速排序(挖坑法,前后指针法,左右指针法)的耗时最少,归并排序(merge)其次,堆排序(heap)和希尔排序(shell)最多。
结论:一般来说,当数据规模较小时,应该选择直接插入排序或冒泡排序。快速排序是一种不稳定的排序,但是对于大部分已经排好的数据,快速排序会浪费大量不必要的步骤。快速排序适用于大量随机数据的情况。
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号