看数据结构写代码(67) 置换 _ 选择排序(完结篇)

本文介绍了置换选择排序的概念,它旨在通过增大归并段来减少外存读写次数,利用最优归并树实现。通过对比,说明了将数据分为2组进行2路归并比分为3组进行3路归并在外存操作上更优,同时也考虑了归并时间成本。文中提供了具体代码,并欢迎讨论。
摘要由CSDN通过智能技术生成

杂谈: 严蔚敏版《数据结构(C语言版)》 一书 终于看完了。这是 一个完结,也是 一个新的开端。《算法导论》 已到手。

置换选择排序的思想 是 将 归并段 尽量 变的 更大,而不是根据 内存 大小 限制在 固定的 大小。 这样 可以 利用赫夫曼树 来 进行 最优归并树,从而 使 外存 读写次数 最少。

下面给出 具体 代码:欢迎指出代码不足。

// Replace_Selcetion.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <climits>
#define M 6//内存一次可容纳的 组数

typedef int LoseTree[M];
typedef struct RcdNode
{
	int key;
	int rNum;//归并段 的段号
}WorkArea[M+1];//内存工作区域。。。

//假设这些文件 存放在 硬盘中..
static int testArray[] = {10,15,169,3,209,18,20,20,22,40,6,15,25,12,37,48,99,100,INT_MAX};
static int readIndex = 0;//读到的索引位置
static int maxIndex = 18;

//调整 函数
void select_miniMax(LoseTree t,WorkArea wa,int i){
	int f = (i + M) / 2;
	while (f > 0){
		RcdNode n1 = wa[i];
		RcdNode n2 = wa[t[f]];
		if
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值