外部排序 简介

我们一般提到排序都是指内排序,比如快速排序,堆排序,归并排序等,所谓内排序就是可以在内存中完成的排序。RAM的访问速度大约是磁盘的25万倍,我们当然希望如果可以的话都是内排来完成。但对于大数据集来说,内存是远远不够的,这时候就涉及到外排序的知识了。
  外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。外部排序最常用的算法是多路归并排序,即将原文件分解成多个能够一次性装人内存的部分,分别把每一部分调入内存完成排序。然后,对已经排序的子文件进行归并排序。

  一般来说外排序分为两个步骤:预处理和合并排序。即首先根据内存的大小,将有n个记录的磁盘文件分批读入内存,采用有效的内存排序方法进行排序,将其预处理为若干个有序的子文件,这些有序子文件就是初始顺串,然后采用合并的方法将这些初始顺串逐趟合并成一个有序文件。

1、外排序的最佳实现方法
外部排序是指大文件的排序,待排序的记录存储在外存储器上,在排序过程中需要多次进行内存和外存之间的交换。对外存文件中的记录进行排序后的结果仍然被放到原有文件中。
外存磁盘文件能够随机存取任何位置上的信息,所以在数组上采用的各种内部排序方法都能够用于外部排序。但考虑到要尽量减少访问外存的次数,故归并排序方法最适合于外部排序。
2、外排序实现过程
外部排序过程可以分成两个相对独立的阶段:
(1)按可用内存的大小,把外存上含有n个记录的文件分成若干个长度为L的子文件,把这些子文件依次读入内存,并利用有效的内部排序方法对它们进行排序,再将排序后得到的有序子文件重新写入外存;
(2)对这些有序子文件逐趟归并,使其逐渐由小到大,直至得到整个有序文件为止。
其中,第一个阶段即为内部排序的操作,而第二个阶段涉及到了外部排序中的归并。在前面提到,内存归并排序在开始时是把数组中的每个元素均看作是长度为1的有序表,在归并过程中,有序表的长度从1开始,依次为2、4、8、……,直至有序表的长度len大于等于待排序的记录数n为止。而在对外存文件的归并排序中,初始有序表的长度通常是从一个确定的长度开始而不是从1开始,这是为了能够有效地减少归并的趟数和访问外存的次数,以提高外部排序的效率。所以,在第一阶段要按照初始有序表确定的长度在原文件上依次建立好每个有序表,在第二个阶段再调用对文件的归并排序算法完成排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值