【数据结构与算法】内部排序总结(附各种排序算法源码)
来源:互联网 发布:程序员接私活赚钱吗 编辑:程序博客网 时间:2024/05/23 20:48
转载请注明出处:http://blog.csdn.net/ns_code/article/details/20540069
内部排序总结
这篇博文我们简要地总结下各种内部排序方法。
这10种排序算法中,前面7种属于建立在“比较”基础上的排序算法,通过决策树已经证明,任何基于比较进行的排序算法的时 间复杂度不可能再优于O(n*logn)。后面3种不是建立在比较的基础上的,因此,可以达到线性运行时间。
下面我们给出各种排序方法的时空复杂度的表格(属于自己总结,有不对的地方,希望大家指正或补充)。
排序方法
最好时间复杂度
平均时间复杂度
最坏时间复杂度
空间复杂度
是否稳定
冒泡排序
O(n)
O(n*n)
O(n*n)
O(1)
稳定
插入排序
O(n)
O(n*n)
O(n*n)
O(1)
稳定
选择排序
O(n*n)
O(n*n)
O(n*n)
O(1)
稳定
希尔排序
O(n)
不定
O(n*n)
O(1)
不稳定
堆排序
O(n*logn)
O(n*logn)
O(n*logn)
O(1)
不稳定
归并排序
O(n*logn)
O(n*logn)
O(n*logn)
O(n)
稳定
快速排序
O(n*logn)
O(n*logn)
O(n*n)
O(logn)
不稳定
计数排序
O(n+k)
O(n+k)
O(n+k)
O(k)
稳定
基数排序
O(d(n+k))
O(d(n+k))
O(d(n+k))
O(k)
稳定
桶排序
O(n)
O(n)
O(n)
不定
取决于桶内
- 后面3种排序效率极高,且只有在一些特定条件下才可以使用,而且需要额外的辅助空间,如果d或k很大,其性能对于主存排序来说就不太好了,计数排序和基数排序最适合于n很大,而k和d很小的情况。
- 在基于比较的排序方法中,就平均性能而言,快速排序最佳。
- 对于最一般的内部排序应用程序,选用的方法一般不是插入排序、希尔排序就是快速排序。
- 归并排序一般只用在小的或非常接近排好序的输入数据上,因为需要O(n)的辅助空间,因此其性能对于主存排序不如快速排序那么好,但是合并时外部排序的中心思想。
- 堆排序要比希尔排序慢,尽管它是一个带有明显紧凑内循环的O(n*logn)算法。
- 性能比较好的几种基于比较的内部排序中,只有归并排序是稳定的,快速排序、堆排序和希尔排序都不稳定,而其他简单的排序算法基本都是稳定的,选择排序除外。一般来说,对于基于比较的排序方法,如果比较是在相邻两个元素之间进行的,则该排序是稳定的。
源码打包下载
源码包括:冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序、计数排序、基数排序等,没有实现桶排序。
完整源码打包下载地址:http://download.csdn.net/detail/mmc_maodun/6995321
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- 内部排序总结(附各种排序算法源码)
- 第二十一篇:内部排序总结(附各种排序算法源码)
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 【数据结构与算法】内部排序之一:插入排序和希尔排序的N中实现(不断优化,附完整源码)
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- 数据结构各种排序算法总结
- 数据结构各种排序算法总结
- 各种内部排序算法!
- 各种内部排序算法
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 连载:面向对象葵花宝典:思想、技巧与实践(23) - 领域建模三字经
- [LeetCode] Unique Binary Search Trees II
- android示例之音乐播放器第六天
- 【数据结构与算法】字典树(附完整源码)
- 【数据结构与算法】HashTable相关操作实现(附完整源码)
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- MFC Check-box Control 复选框操作
- 【数据结构与算法】内部排序之五:计数排序、基数排序和桶排序(含完整源码)
- 【数据结构与算法】内部排序之四:归并排序和快速排序(含完整源码)
- Visual Studio 2013 Update2
- 黑马程序员 java基础24天 基础部分串烧
- 【数据结构与算法】内部排序之三:堆排序(含完整源码)
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 【数据结构与算法】自己动手实现图的BFS和DFS(附完整源码)