我想为我的DBMS项目实现外部合并排序。我有一个3个文件,每个20页,我的缓冲区大小是20页。 这些我现在已经排序了。所以20页的三个文件都被排序。现在,在合并时,我需要将每个文件(6x3 = 18页)和1页的6页写入排序后的输出。并且这必须完成4次才能完整整理文件。 但我很难合并所有这些文件?任何步骤如何执行3个文件的合并,确保每个页面都带入缓冲区大小。任何递归函数? 所有的文件内容存储在数组a [文件编号] [pageno]格式 例如a [1] [20] = 5意味着我有在文件1的页面20号数据5。 假设文件的页面保存一个整数。外部合并排序
Q
外部合并排序
-1
A
回答
1
假设您进行3路合并,即3路输入和1路输出,并且只需要进行一次。将缓冲区分成4部分,每部分5页。首先阅读3个文件的前5个页面,每个文件放在5个页面缓冲区中。通过比较3个缓冲区中的每个缓冲区中的第一条记录并将最小值移动到输出缓冲区来开始3路合并。当输出缓冲区填满(5页)时,将其写出并继续。当输入缓冲区清空时,请阅读该文件的下5页。
当三个输入文件中的一个到达时,代码切换到2路合并。为了简化代码,将文件相关参数复制到文件0和文件1的参数中。如果文件2先变空,则不需要执行任何操作。如果文件1首先变空,则将文件2参数复制到文件1.如果文件0先变空,则将文件1参数复制到文件0,然后将2参数写入文件1。然后使用文件0和文件1进行2路合并。
当两个输入文件的末尾达到时,代码切换为仅复制剩余文件。同样,如果文件0首先变空,则将文件1参数复制到文件0,以便复制代码始终与文件0一起工作。
相关问题
- 1. 实现外部合并排序
- 2. 外部排序:多路合并
- 3. 外部存储器合并排序
- 4. 外部排序与k路合并与快速排序
- 5. 合并排序中的合并部分
- 6. 提高C++程序的I/O性能[外部合并排序]
- 7. 如何计算就地外部合并排序的时间?
- 8. Scala:构建外部合并排序的文件读取
- 9. 合并排序,递归部分
- 10. 外部排序Java
- 11. 如何将合并排序转换为并行合并排序
- 12. 合并排序java
- 13. 合并排序R
- 14. 并行合并排序
- 15. 二元合并排序&天然合并排序
- 16. 外部联接合并列
- 17. Webstorm外部合并工具
- 18. C++合并排序不会合并?
- 19. 合并列表和“合并”排序
- 20. 合并排序不排序数组
- 21. 罐推荐和排序(排序合并)
- 22. 随机数外部排序
- 23. 外部排序GC开销
- 24. C++外部冒泡排序
- 25. 如何在二进制文件上执行外部合并排序
- 26. 在Java中合并排序
- 27. 合并排序给出IndexOutOfBoundsException
- 28. 合并排序代码C++
- 29. 实现合并排序C++
- 30. 合并排序问题 - Python