常用排序算法总结

排序方法平均时间最坏情况辅助存储稳定性备注
冒泡排序O(n^2)O(n^2)O(1)稳定 
插入排序O(n^2)O(n^2)O(1)稳定 
选择排序O(n^2)O(n^2)O(1)不稳定 
快速排序O(n*logn)O(n^2)O(logn) ~ O(n)不稳定快速排序的空间占用源于需要栈空间来实现递归
堆排序O(n*logn)O(n*logn)O(1)不稳定 
归并排序O(n*logn)O(n*logn)O(n)稳定 
桶排序O(n)O(n)O(m)稳定m表示序列元素的值的上界
基数排序O(p*n)O(p*n)O(r*n)稳定p是序列元素以r为基数时的最大位数
Shell排序-O(n^2)O(1)不稳定Shell排序的性能取决于增量序列的选取,很难给出平均时间

选择合适的排序方法时,通常要考虑以下因素:

  • 待排序记录的规模n
  • 时间和空间复杂度的要求
  • 稳定性要求
  • 记录的初始状态(是否部分有序)
  • 关键字的结构(是否为多关键字)

我们的结论是:
1.若n较大,应选择平均时间复杂度为O(n*logn)的排序方法如快速排序、堆排序以及归并排序
2.在上面提到的时间复杂度为O(n*logn)的三种排序方法中:
  • 快速排序的平均性能是最好的,但最坏情况下(初始状态记录已基本有序)快速排序会蜕化为冒泡排序,时间复杂度为O(n^2)(虽然出现最坏情况的概率很低)
  • 堆排序相较于快速排序的优势在于,需要的辅助空间更少,并且堆排序最坏情况的时间复杂度仍为O(n*logn)
  • 归并排序的优势在于,它既能保持O(n*logn)的时间复杂度,还是一种稳定排序,这是快速排序和堆排序均不具备的;另外,可将堆排序与插入排序结合使用(子序列较短时使用直接插入排序,较长时使用归并)
3.n较小时(n<=50),可采用插入排序或选择排序
???4.若初始状态记录基本有序,应选择插入排序、冒泡排序或随机的快速排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值