如果以前重复过这种情况,我深表歉意,但我找不到任何使用我选择的措辞的帖子。我正在准备面试,并且一直在阅读有关外部排序的信息。例如,如果要对几个 32 位整数的硬盘进行排序,可以进行计数排序,并使用 64 位计数器对 32 位整数进行计数。然后,对于每一个可能的 32 位整数值,您都会有一个计数器来表示它。您还可以对类似的事情使用外部合并排序,花费 O(nlogn) 时间而不是 O(1) 时间。但是,我一直在考虑一个可能很常见的案例,但我想不出最好的方法 - 将新数据添加到可能跨越许多硬盘的一堆排序文件中。
如果内存中有数据,则可以使用堆(优先队列)在登录时间内完成此插入。但是,我们不能从硬盘空间中进行堆。使用列表,您必须使用 O(logn) 搜索来查找数据的位置(对于二进制搜索,已排序),然后将其余数据向后或向前颠簸,或者您可能不必根据实现进行任何移动容器(数组、链表等)。然而,在硬盘世界中,读写比在 RAM 中要昂贵得多,因此在某处插入数据然后转移(重写)其余数据似乎非常昂贵。你们有什么技术可以推荐给我吗?我很乐意阅读自己,我只是找不到正确的方式来表达我的问题以找到任何信息。谢谢!