面试对线记录16 30G数据只有一个2G的内存应该怎么排序
最近东莞这边疫情真的很恐怖,我最近只能在家办公了,顺便最近的话也是金三银四,正好是跳槽的好时机,最近正好遇到了一个面试官问过我的小问题,拿出来分享一下,30G数据2G内存应该怎么排序呢。 刚开始的话我想的是先是把数据分成30份,然后两份两份用归并,但是后来发现有个问题就是,这么排序肯定是不能用的,因为归并完以后你没得操作了呀。所以后来我疯狂百度一波,发现我当初在看归并算法的时候,严奶奶那本书上讲的是二路归并,印象里只有二路归并了。实际上来说可以有很多路归并的算法,所以我们可以按照以前的思想,把30G数据分成30份,然后我们把每份数据读到内存里,随便用什么算法排序一下再导出去到磁盘,接下来的重点就是,我们从三十个块中可以读取1.5G/30的数据读到内存中,然后进行30路归并排序,并且将结果输出到缓冲区中,缓冲区满了就io到外部磁盘中,清空缓冲区,如果这三十个数据某一个用完了,就可以接着从磁盘中读取下一段,这样子就可以排序完成了。