数据结构——外部排序

这篇博客主要介绍了外部排序中的多路平衡归并和置换—选择排序过程。通过详细步骤展示了如何进行外部排序,特别是如何利用内存工作区、输出文件和归并段进行操作。还提及了使用哈夫曼树构造最佳归并树以优化排序结果。
摘要由CSDN通过智能技术生成

之前有写过内部排序,这次看到严蔚敏老师的书上还介绍了外部排序,就一起记录一下,以便以后可以看看:

1.外部排序

外部排序是指数据量很大,一下子不能将所有的数据放入内存里面进行排序,只能一部分一部分从硬盘中读取数据,送入内部排序,将内部排序的结果取出,换下一批数据进行排序。
对于外部排序的提高的核心问题是:减少外部存储读写的次数。在一般情况下,对m个初始归并段进行K-路平衡归并,归并的趟数:s=以k为底,m的对数结果的向上取整值。

2.多路平衡归并的实现

由于K的增加能够减少m便能减少存储读写的次数,但是k的增加,内部归并时间也会增大,这样不是我们所希望的。所以我们在内部排序的时候如果能选择一种算法将不随K的选择而增加内部排序的时间的话,那就是比较好的,这就是”败者树“,看一下败者树的定义:在对一个序列进行初始堆的建立,然后每次让子孩子的大的去上一次,这样的过程就是构建一个败者树。
败者树的核心代码:
void Adjust(int s)
{
	int t=(s+k)/2;
	int temp;
	while(t>0)
	{
		if(External[s] > External[LoserTree[t]])
		{
			temp = s;
			s = LoserTree[t];
			LoserTree[t]=temp;
		}
		t=t/2;
	}
	LoserTree[0]=s;
}

void CreateLoserTree()
{
	External[k]=MINKEY;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值