-
排序
将一个 数据元素(或记录)的 任意序列
,重新排列成一个按关键字有序的序列。 -
排序的分类
1、内部排序
2、外部排序 -
内部排序
待排序记录存放在计算机随机存储器(内存)
中进行的排序过程,整个排序过程不需要访问外存便能完成。
内部排序
是外部排序的基础
,本章介绍内部排序。 -
外部排序
待排序记录的数量很大,整个序列的排序过程不可能只在内存中完成,在排序过程中仍然需要对外存进行访问的排序过程。
内部排序
-
内部排序过程是一个逐步扩大记录的有序序列长度的过程,
把整个序列
变成两个部分,无序区
和有序区
,排序过程中有序区逐渐扩大至整个序列。
不同的排序方法
其实就是不同的扩大记录有序序列长度的方法
。
如下图:
一趟排序:将无序序列区中一个或者若干个记录
转换到有序区
中去。 -
排序的两种基本操作
1、比较两个关键字的大小
2、将记录从一个位置移动到另一个位置 -
逐步扩大记录有序序列长度的方法有下面几类:
1、插入类
2、交换类
3、选择类
4、归并类
5、其它 -
1、插入类
将无序子序列中的一个或几个记录
插入到有序序列
中,从而增加记录的有序子序列的长度。 -
2、交换类
通过交换无序序列中的记录
从而得到其中关键字最小或者最大的记录
,并将它加入到有序子序列
中,依此方法增加记录的有序子序列的长度。 -
3、选择类
从记录的无序子序列中
选择关键字最小或最大的记录
,并将它加入到有序子序列中,依此方法增加记录的有序子序列的长度。(基本操作是选择) -
4、归并类
通过归并两个或两个以上的记录有序子序列
,逐步增加记录有序序列的长度。 -
实现一趟插入排序可分为如下三步:
1、在 R[ 1 … i-1 ] 中查找 R[i] 的插入位置;要满足 R[1 … j] <= R[i] <= R[j+1 … i-1]。
2、将 R[j+1 … i-1] 中的所有记录均后移一个位置。
3、将 R[i] 复制到 R[j+1] 的位置上。