浅析各类排序算法(一) 总述

数据结构刚刚学过排序算法,觉得有必要整理一下。因为内容过多一篇博文不便于整理和查找,所以分为了多个章节。以lls(漂亮哇卡卡(●ˇ∀ˇ●))的授课课件为基础,整理了一下各种内部排序算法,算是对于数据结构的排序这一部分的归纳总结与拓展。(内容还很不完善,希望巨巨们多多留言提供,蟹蟹(ง •_•)ง)

从算法的实现方法和策略选取上给出了两种分类标准:

各类排序算法性能及稳定性分析:

Ø内部排序方法分类:复杂度O(n2)的简单排序方法,O(nlogn)的高效排序方法(比较法的理论下界),O(d*(n+rd))的基数排序方法.
Ø各排序方法各有优缺点,具体选择时考虑稳定性、记录大小(小则简单方法即可)、原始数据是否基本有序、关键字大小等因素。
Ø直接插入排序适合基本有序、n值较小时,基数排序适合关键字较短、n较大、空间充裕、要求稳定时;快速排序适合n大、不要求稳定、分布随机时;堆排序适合n大、关键字分布可能有序、不要求稳定;归并排序适合n大、关键字分布可能有序、要求稳定且内存空间充裕时;如果只选择最小的前几个元素,则简单选择排序优先
Ø理论上可证明基于比较的排序方法可能达到的最快的时间复杂度为O(nlogn);基数排序不是基于“比较”

Ø为避免顺序存储上大量移动记录的时间开销,可考虑用链表作为存储结构的排序有:直接插入排序,归并排序,基数排序。不宜采用链表作为存储结构的排序方法有:折半插入排序,希尔排序,快速排序,堆排序。

Øn较大时
(1)分布随机,稳定性不做要求,则采用快速排序
(2)内存允许,要求排序稳定时,则采用归并排序
(3)可能会出现正序或者逆序,稳定性不做要求,则采用堆排序或者归并排序

Øn较小时
(1)基本有序,则采用直接插入排序
(2)分布随机,则采用简单选择排序,弱排序码不接近逆序,也可以采用直接插入排序

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chook_lxk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值