10.1概述 10.2插入排序 10.3快速排序 104堆排序 10.5归并排序 10.6基数排序 10.7各种排序方法的综合比较 10.8外部排序
10.1 概述 10.2 插入排序 10.3 快速排序 10.4 堆排序 10.5 归并排序 10.6 基数排序 10.7 各种排序方法的综合比较 10.8 外部排序
10.1概述 、排序的定义 、内部排序和外部排序 三、内部排序方法的分类
10.1 概 述 一、排序的定义 二、内部排序和外部排序 三、内部排序方法的分类
、什么是排序? 排序是计算机内经常进行的一种操作, 其目的是将一组“无序”的记录序列调 整为“有序”的记录序列。 例如:将下列关键字序列 52,49,80,36,14,58,61,23,97,75 调整为 14,23,36,49,52,58,61,75,80,97
一、什么是排序? 排序是计算机内经常进行的一种操作, 其目的是将一组“无序”的记录序列调 整为“有序”的记录序列。 例如:将下列关键字序列 52, 49, 80, 36, 14, 58, 61, 23, 97, 75 调整为 14, 23, 36, 49, 52, 58, 61 ,75, 80, 97
般情况下, 假设含n个记录的序列为{R1,R2,…,Rn} 其相应的关键字序列为{K1,K2…,Kn} 这些关键字相互之间可以进行比较,即在 它们之间存在着这样一个关系 Kn1≤Kn≤。≤K p pn 按此固有关系将上式记录序列重新排列为 RR 2 R p1 p n pn 的操作称作排序
一般情况下, 假设含n个记录的序列为{ R1 , R2 , …, Rn } 其相应的关键字序列为 { K1 , K2 , …,Kn } 这些关键字相互之间可以进行比较,即在 它们之间存在着这样一个关系 : Kp1≤Kp2≤…≤Kpn 按此固有关系将上式记录序列重新排列为 { Rp1, Rp2, …,Rpn } 的操作称作排序
二、内部排序和外部排序 若整个排序过程不需要访问外存便 能完成,则称此类排序问题为内部排 序 反之,若参加排序的记录数量很大, 整个序列的排序过程不可能在内存中 完成,则称此类排序问题为外部排序
二、内部排序和外部排序 若整个排序过程不需要访问外存便 能完成,则称此类排序问题为内部排 序; 反之,若参加排序的记录数量很大, 整个序列的排序过程不可能在内存中 完成,则称此类排序问题为外部排序
三、内部排序的方法 内部排序的过程是一个逐步扩大 记录的有序序列长度的过程。 有序序列区无序序列区 经过一趟排序 有序序列区无序序列区
三、内部排序的方法 内部排序的过程是一个逐步扩大 记录的有序序列长度的过程。 经过一趟排序 有序序列区 无 序 序 列 区 有序序列区 无 序 序 列 区
基于不同的“扩大”有序序列长 度的方法,内部排序方法大致可分 下列几种类型 插入类交换类选择类 归并类其它方法
基于不同的“扩大” 有序序列长 度的方法,内部排序方法大致可分 下列几种类型: 插入类 交换类 选择类 归并类 其它方法
排录的数类型定频序表最大长度 typedef int KeyType;∥/关键字类型为整数类型 typedef struct i KeyType key ∥关键字项 InfoType otherinfo;∥其它数据项 3 RcdType, ∥记录类型 typedef struct t RcdType rMAXSIZE+1;/r10闲置 int length; ∥顺序表长度 i Sqlist ∥顺序表类型
#define MAXSIZE 1000 待排记录的数据类型定义如下 // 待排顺序表最大长度 : typedef int KeyType; // 关键字类型为整数类型 typedef struct { KeyType key; // 关键字项 InfoType otherinfo; // 其它数据项 } RcdType; // 记录类型 typedef struct { RcdType r[MAXSIZE+1]; // r[0]闲置 int length; // 顺序表长度 } SqList; // 顺序表类型
1插入类 将无序子序列中的一个或几 个记录“插入”到有序序列中, 从而增加记录的有序子序列的长 度
1. 插入类 将无序子序列中的一个或几 个记录“插入”到有序序列中, 从而增加记录的有序子序列的长 度
2.交换类 通过“交换”无序序列中的记 录从而得到其中关键字最小或最大 的记录,并将它加入到有序子序列 中,以此方法增加记录的有序子序 列的长度
2. 交换类 通过“交换”无序序列中的记 录从而得到其中关键字最小或最大 的记录,并将它加入到有序子序列 中,以此方法增加记录的有序子序 列的长度