内部排序

内部排序

插入排序

  • 直接插入排序
  • 折半插入排序
  • 2-路插入排序
  • 表插入排序

希尔排序

快速排序

  • 冒泡排序
  • 快速排序

选择排序

  • 简单选择排序
  • 树形选择排序
  • 堆排序

归并排序

基数排序

  • 多关键字排序
  • 链式基数排序

各种内部排序的比较

各种内部排序按所采用的基本思想( 策略) 可分为:
插入排序 、 交换排序 、 选择排序 、 归并排序 和 基
数排序

数排序 ,它们的基本策略分别是:
1 插入排序 : 依次将无序序列中的一个记录,按关
键字值的大小插入到已排好序一个子序列的适当位置,
直到所有的记录都插入为止。具体的方法有:直接插入、
表插入、
键字值的大小插入到已排好序一个子序列的适当位置,
直到所有的记录都插入为止。具体的方法有:直接插入、
表插入、2- 路插入和shell 排序。
2 交换排序 : 对于待排序记录序列中的记录,两两
比较记录的关键字,并对反序的两个记录进行交换,直
对于待排序记录序列中的记录,两两
比较记录的关键字,并对反序的两个记录进行交换,直
到整个序列中没有反序的记录偶对为止。具体的方法有:
冒泡排序、快速排序。
3 选择排序 : 不断地从待排序的记录序列中选取关
键字最小的记录,放在已排好序的序列的最后,直到所
有记录都被选取为止。具体的方法有:简单选择排序、
堆排序。
不断地从待排序的记录序列中选取关
键字最小的记录,放在已排好序的序列的最后,直到所
有记录都被选取为止。具体的方法有:简单选择排序、
堆排序。
4 归并排序 : 利用“归并”技术不断地对待排序记
录序列中的有序子序列进行合并,直到合并为一个有序
序列为止。
利用“归并”技术不断地对待排序记
录序列中的有序子序列进行合并,直到合并为一个有序
序列为止。
5 基数排序 : 按待排序记录的关键字的组成成分
(“ 位”) 从低到高( 或从高到低)进行。每次是按记录关键
字某一“位”的值将所有记录分配到相应的桶中,再按
进行。每次是按记录关键
字某一“位”的值将所有记录分配到相应的桶中,再按
桶的编号依次将记录进行收集,最后得到一个有序序列。
各种内部排序方法的性能比较如下表。
方法 平均时间 最坏所需时间 附加空间 稳定性
直接插入 O(n 2 ) O(n 2 ) O(1) 稳定的
Shell 排序 O(n 1.3 ) O(1) 不稳定的
直接选择 O(n 2 ) O(n 2 ) O(1) 不稳定的
堆排序 O(n ㏒ 2 n) O(n ㏒ 2 n) O(1) 不稳定的
冒泡排序 O(n 2 ) O(n 2 ) O(1) 稳定的
快速排序 O(n ㏒ 2 n) O(n 2 ) O( ㏒ 2 n) 不稳定的
归并排序 O(n ㏒ 2 n) O(n ㏒ 2 n) O(n) 稳定的
基数排序 O(d(n+r)) O(d(n+r)) O(n+r) 稳定的

选择排序方法的主要考虑因素:

  • 待排序的记录数目n;
  • 每个记录的大小;
  • 关键字的结构及其初始状态
  • 是否要求排序的稳定性
  • 语言工具的特性
  • 存储结构的初始条件有要求;
  • 时间复杂度,空间复杂度和开发工作的复杂度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值