排序算法——比较与总结

排序算法1——图解冒泡排序及其实现(三种方法,基于模板及函数指针)
排序算法2——图解简单选择排序及其实现
排序算法3——图解直接插入排序以及折半(二分)插入排序及其实现
排序算法4——图解希尔排序及其实现
排序算法5——图解堆排序及其实现
排序算法6——图解归并排序及其递归与非递归实现
排序算法7——图解快速排序以及不同CUTOFF的时间测试
排序算法8——图解表排序
排序算法9——图解桶排序及其实现
排序算法10——图解基数排序(次位优先法LSD和主位优先法MSD)
排序算法——比较与总结


排序算法效率比较

不存在绝对意义上最佳的方法,这些排序方法分别适用于不同的条件下

排序方法 平均时间复杂度 最坏情况下时间复杂度 额外空间复杂度 稳定性
简单选择排序 O(N2 O(N2 O(1) 不稳定
冒泡排序 O(N2 O(N2 O(1) 稳定
直接插入排序 O(N2 O(N2 O(1) 稳定
希尔排序 O(Nd),1<d<2 O(N2 O(1) 不稳定
堆排序 O(NlogN) O(NlogN) O(1) 不稳定
快速排序 O(NlogN) O(N2 O(logN) 不稳定
归并排序 O(NlogN) O(NlogN) O(N) 稳定
基数排序 O(D(N+R) O(D(N+R) O(N+R) 稳定

时间复杂度最低的方法——基数排序

它借助O(N+R)辅助空间严格限制的元素数据类型,仅需要O(D(N+R))的时间复杂度
适用于处理数量大、关键字取值范围有限的序列。同时,它是稳定的排序。

除基数排序外,其他的方法都是建立在比较和交换操作上的
决定它们性能的是比较、交换(主要是比较)的次数是否需要额外空间保存临时值

具有O(N2)时间复杂度的方法——简单选择、直接插入、冒泡排序

元素规模N较小或基本有序时,它们是比较好的排序方法。
简单选择排序是不稳定的,直接插入和冒泡排序是稳定的。

具有O(Nlog2N)时间复杂度的方法

1)堆排序

在栈顶元素输出后需要寻找下一个堆顶元素,在寻找的过程中不断将问题规模减小
堆排序在空间复杂度上表现出色,仅需要常数个额外空间

2)快速排序

在寻找主元以后,序列划分为两个部分,两个部分内部各自进行比较交换,两个部分之间没有进行比较
然而,在最坏情况下,快速排序可能导致O(N2)的时间复杂度
另外,快速排序需要O(log2N)深度的栈空间

3)归并排序

始终将规模减半再进行排序,在规模为N时再进行复杂度为O(N)的归并操作
归并排序需要O(N)的额外空间

猜你喜欢

转载自blog.csdn.net/CSDN_dzh/article/details/85047774
今日推荐