用败者树实现置换-选择算法

很多排序算法,插入排序、选择排序、归并排序等,这些算法都属于内部排序算法,排序的整个过程只是在内存中完成。而当待排序的文件比内存的可使用容量还大时,文件无法一次性放到内存中进行排序,需要借助于外部存储器(例如硬盘、U盘、光盘),这时要用到外部排序算法来解决。

外部排序算法由两个阶段构成:

1、按照内存大小,将大文件分成若干长度为l的子文件(l应小于内存的可使用容量),然后将各个子文件依次读入内存,使用适当的内部排序算法对其进行排序(排好序的子文件称为归并段或者顺段),将排好序的归并段重新写入外存,为下一个子文件排序腾出内存空间。

2、对得到的归并段进行合并,直至得到整个有序的文件为止。

/**
*    实验题目:
*        用败者树实现置换-选择排序算法
*    实验目的:
*        领会外排序中置换-选择排序算法的执行过程和算法设计
*    实验内容:
*        编写程序,模拟置换-选择算法生成初始归并段的过程以求解以下问题:
*    设磁盘文件中共有18个记录,记录的关键字序列为:(15, 4, 97, 64, 17, 32, 108,
*    44, 76, 9, 39, 82, 56, 31, 80, 73, 255, 68)
*    若内存工作区可容纳5个记录,用置换-选择排序可产生几个初始归并段,每个
*    初始归并段包含哪些记录?假设输入文件数据和输出归并段数据均放在内存中。
*/

#include <stdio.h>


#define MAX_SIZE    50                          //  每个文件最多记录数
#define MAX_KEY     32767                       //  最大关键字值∞
#define W           5                           //  内存工作区可容纳的记录个数

typedef int key_type;                           //  定义关键字类型为整型
typedef int info_type;                          //  定义其他数据项的类型
typedef int loser_tree;                         //  败者树结点类型,它是完全二叉树且不含叶子,采用顺序存储结构

typedef struct
{
    key_type key;                               //  关键字项
    info_type other_info;  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值