排序算法
排序:整理文件中的记录,使之按关键字递增(递减)的次序排列起来
被排序对象-文件
排序运算的依据-关键字
1.排序的稳定性
当待排序记录的关键字均不相同时,排序结果是唯一的,否则不唯一
稳定性的前提:待排序的文件中,存在多个关键字相同的记录
经过排序后:
若具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的
若具有相同关键字的记录之间的相对次序发生变化,则是不稳定的
2.排序的分类
按是否涉及数据的内、外存交换,分为内部排序和外部排序
排序过程中,整个文件都放在内存中处理,排序不涉及数据的内外存交换,,则称之为内部排序,否则,称之为外部排序
内部排序常用于记录个数不是很多的小文件
外部排序适用于记录个数太多、不能一次将其全部放入内存的大文件
3.排序的基本操作
1.比较两个关键字的大小
2.改变指向记录的指针或者移动记录本身
第二中操作依赖于待排序记录的存储方式。
4.待排文件的常用存储方式
1.以顺序表作为存储结构
对记录本身进行物理重排,即通过关键字的比较,将记录移到合适的位置
2.以链表作为存储结构
无须移动记录,仅需修改指针
3.用顺序的方式存储待排序的记录,但同时建立一个辅助表,比如包括关键字和指向记录位置的指针组成的索引表
只需对辅助表的表目进行物理重排,即只移动辅助表的表目,而不移动记录本身
5.评价算法的性能指标
1.执行时间和所需的辅助空间
2.算法本身的复杂程度
1.时间复杂度
大多数排序算法的时间开销主要是关键字之间的比较和记录的移动,有的排序算法其执行时间不仅依赖于问题的规模,还取决于输入实例中数据的状态(已排序好或者说反向排序好)
2.空间复杂度
若排序算法所需的辅助空间并不依赖于问题的规模n,即辅助空间为O(1),则称之为就地排序(In-Place),非就地排序要求的辅助空间一般为O(n)
6.稳定排序和不稳定排序
| 最坏 | 最好 | 平均 | 空间复杂度 | 稳定性 |
冒泡排序 | O(n2) | O(n) | O(n) | O(1) | 稳定 |
堆排序 |
|
|
|
|
|
插入排序 |
|
|
|
|
|
归并排序 |
|
|
|
|
|
快速排序 |
|
|
|
|
|
基数排序 |
|
|
|
|
|
选择排序 |
|
|
|
|
|
希尔排序 |
|
|
|
|
|