1. 内部排序与外部排序的区别:
排序过程中涉及的存储器不同,内部排序所操作的数据都存放于内存;而外部排序所操作的数据量太大以至于不能全部放于内存,会涉及到外存访问。
2. 内部排序算法的稳定性:
待排序的数据中如果有两个相等的数据,经过排序算法之后的先后顺序依据不变的话,则称该排序方法是稳定的,否则就是不稳定的。
3.内部排序算法的分类:
3.1 按内部排序过程中所需的工作量来区分可分为三类:
(1) 简单的排序方法, 其时间复杂度为n*n
(2) 先进的排序方法, 其时间复杂度为nlogn
(3) 基数排序,其时间复杂度为d*n
3.2 按内部排序过程中所依据的不同原则可分为五类:
(1)插入排序: 直接插入排序 折半插入排序 2-路插入排序 表插入排序 希尔排序
(4)归并排序: 2-路归并排序
(5)基数排序: 链式基数排序
下表是各内部排序方法的总览:
3.3
另外,对于单个记录所占空间太大时,排序过程中不合适直接进行记录间的交换,而有些内部排序方法如堆排序、快速排序,无法像表插入排序、链式基数排序那样,以修改指针代替记录移动,这种情况下,可以另设一个地址向量,当移动和比较记录时,利用地址向量中的值实现,与此方法相关的算法见 地址排序(重排算法)
3.4 最后,探讨下,”内部排序可能达到的最快速度?”
上述讨论的排序方法(除基数排序外),都是基于“关键字间的比较”实现的,这类操作可以用一个判定树描述,利用二叉树相关的基础性质知,借助于“比较”进行排序的算法在最坏情况下能达到的最好的时间复杂度就是nlog2n