待排记录的数据类型: 待排记录的数据类型 #define MAXSIZE 20 typedef struct{ KeyType key; }RedType; typedef struct{ RedType r[MAXSIZE+1]; int length; }SqList; /*待排序文件中记录的个数 待排序文件中记录的个数*/ 待排序文件中记录的个数 /*待排序文件类型 待排序文件类型*/ 待排序文件类型 /*记录类型的定义 记录类型的定义*/ 记录类型的定义 /*文件中记录个数的最大值 文件中记录个数的最大值*/ 文件中记录个数的最大值 typedef int KeyType; /*定义排序码类型为整数类型 定义排序码类型为整数类型*/ 定义排序码类型为整数类型
二、堆排序 ——只需要一个记录大小的辅助空间 只需要一个记录大小的辅助空间, ——只需要一个记录大小的辅助空间,每个待排序 的记录仅占有一个存储空间 堆是一个序列{k 它满足下面的条件: 堆是一个序列{k1,k2,…,kn},它满足下面的条件: 并且k i=1,2,…,n/2 ki≤k2i并且ki≤k2i+1,当i=1,2,…,n/2 小根堆 i=1,2,…,n/2 ki≥k2i并且ki≥k2i+1,当i=1,2,…,n/2 大根堆 k 并且k k 采用顺序方式存储这个序列, 采用顺序方式存储这个序列,就可以将这个序列的每 一个元素k 看成是一棵有n个结点的完全二叉树的第i 一个元素ki看成是一棵有n个结点的完全二叉树的第i 个结点,其中k 是该二叉树的根结点。 个结点,其中k1是该二叉树的根结点。
设待排序的7记录的排序码为{312,126,272,226, 设待排序的7记录的排序码为{312,126,272,226, {312 28,165,123},初始让d=7/2=3 以后每次让d d=7/2=3, 28,165,123},初始让d=7/2=3,以后每次让d缩小 一半, 一半,其排序过程如图所示