排序算法总结

感谢原文作者:http://knowmore.blogbus.com/logs/11803419.html

 

一、排序的分类    

    1. 根据排序的稳定性,排序可以分为稳定排序和非稳定排序。

      稳定排序:冒泡排序、直接插入排序

      不稳定排序:选择排序、希尔排序、快速排序

 

    2. 根据数据在排序过程中所在的位置可以分为:内部排序和外部排序

      内部排序 : 冒泡排序,直接插入排序,简单选择排序,快速排序,堆排序

      外部排序 : 多路平衡归并、置换 - 选择排序、最佳归并树

 

     3. 按策略划分内部排序方法,可分为 : 插入排序、选择排序、交换排序、归并排序和分配排序。

 

二、内部排序常用算法比较            

排序方法

平均时间

最坏情况

辅助存储

简单排序

O(n 2 )

O(n 2 )

O(1)

快速排序

O(nlogn)

O(n 2 )

O(logn)

堆排序

O(nlogn)

O(nlogn)

O(1)

归并排序

O(nlogn)

O(nlogn)

O(n)

基数排序

O(d(n+rd))

O(d(n+rd))

O(rd)

希尔排序

O(n 3/2 )

O(n 2 )

O(1)

从表中可以得出以下几个结论:

   (1) 从平均时间性能而言,快速排序最佳,其所需时间最省。但快速排序在最坏情况下的时间性能不如堆排序和归并排序。而后者相比较的结果是:在 n 较大时,归并排序所需的时间要比堆排序少,但它所需的辅助存储量最多。

(2) 上表的“简单排序”是指除了希尔排序以外的所有插入排序、起泡排序和简单选择排序,其中以直接插入排序最为简单,当序列中的记录“基本有序 n 值较小时,它是最佳的排序方法。因此,常将它和其它的排序方法,诸如快速排序、归并排序等结合在一起用。

(3) 基数排序的时间复杂度也可以写成 O(d · n) 。因此,它最适用于 n 值很大,而关键字较小的序列。若关键字也很大,而序列在的“最高位关键字”均不同,则亦可先按“最高位关键字”不同分成若干“小”的子序列,然后进行直接插入排列。

(4) 从方法的稳定性比较,基数排序是稳定的内排方法,所有时间复杂度是 O(n 2 ) 的简单排序都是稳定的 ( 除选择排序 ) , 而快速排序、堆排序和希尔排序等时间性能较好的排序方法都是不稳定的。一般来说,排序过程中的“比较”是在“相邻的两个记示关键字”间进行的排序方法是稳 定的。值得注意的是:稳定性是由方法本身决定的。对不稳定的排序方法,不管其描述形式如何,总能举出一个说明其不稳定性的实例来。反之,对稳定的排序方 法,总能找到一种引起稳定的描述形式。由于大多数情况下排序是按记录的主关键字进行的,则所用的排序方法是否稳定无关要紧。若排序是按次关键字进行的,则 应根据问题所需,慎重选择排序方法及其描述算法。

综上所述: 没有哪一种排序方法是最优的。有的适用于 n 较大的情况,有的适用于 n 较小的情况……在实际应用中应根据不同情况适当选用,甚至可以将多种方法结合使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值