内部排序
插入排序
- 直接插入排序
- 折半插入排序
- 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;
- 每个记录的大小;
- 关键字的结构及其初始状态
- 是否要求排序的稳定性
- 语言工具的特性
- 存储结构的初始条件有要求;
- 时间复杂度,空间复杂度和开发工作的复杂度。