外部排序思想

基本思想:将外部数据分成若干份,分别移动到内存进行排序后输出。再归并排序。
链接1:http://blog.csdn.net/jeason29/article/details/50474772
优化:

  • 增设一个缓冲buffer,加速从文件到内存的转储
  • 流水线,并行实现,会引发资源冲突,因此将内存分为三份
  • 最好不要用快速排序,因为速度不稳定,会影响流水线的效率
  • 归并时候的优化:在内存中用堆表示读取进来的数,复杂度由O(n)降为O(logn)

链接2:http://blog.csdn.net/jxq0816/article/details/52487669
访问外存次数的计算:

一个含有2000个记录的文件,每个磁盘可容纳250个记录,则该文件包含8个磁盘块。然后对该文件作二路归并排序,每次往内存读入两个磁盘块,排序后再写回磁盘。把内存工作区等分为3个缓冲区。其中的两个为输入缓冲区。一个为输出缓冲区,在内存中利用简单二路归并merge函数实现二路归并。

每一趟对全部文件的处理需要8进8出,即读写16次。
其后有三趟归并(log2 8=3)。
故上述二路归并排序的总时间为:4*16=64。

增大归并路m,或减少初始归并段个数r,都能降低读写次数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,251评论 25 709
  • 内排序的归并排序是采用二路归并。 将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有...
    Arya鑫阅读 14,825评论 0 10
  • 教你如何迅速秒杀掉:99%的海量数据处理面试题 本文经过大量细致的优化后,收录于我的新书《编程之法》第六章中,新书...
    Helen_Cat阅读 12,124评论 1 39
  • 长安居不易,满城无闲人 。
    chinawumei阅读 3,017评论 0 0
  • 有时候,怎么样活着,是自己的一种选择,没有任何人逼你,如果你什么都知道,为什么还要委屈求全呢,所以说,因为自己的无...
    828b2ef774a1阅读 2,425评论 0 0

友情链接更多精彩内容