如何使用较少/较少的内存对文件中的数百万行数据进行排序

Mat*_*y H 16 algorithm

(从这里)

我上周参加了一个采访,问了这个问题:

如何在基于8080处理器的计算机中仅使用640KB内存的文件中对十亿行数据进行排序?没有虚拟内存,没有外部磁盘.

我明确地询问了面试官我是否可以使用硬盘驱动器,所以我可以在排序树时对其进行序列化,然后在最后进行组合.他说不.我尝试了很多方法,不同的算法.他没有同意.

我放弃了,礼貌地问他,"你会怎么做?" 他直言不讳地说:"我不会告诉你的." (采访在那之后就结束了.我不是故意得罪他,作为一名开发人员,我很好奇.而且,这是一个本能的问题,就像我在工作场所问过任何人一样.)

这次访谈是为了一家非常大的银行.

那么,怎么会有人解决这个问题呢?

Squ*_*ama 7

Heapsort将是我的推荐.当n很大时,它相对较快,你只需要同时查看具有明确不同的三个元素.

话虽这么说,我的直觉告诉我,即使在C中,在8080上排序十亿行也是不可能的慢.


Ste*_*end 6

对于初学者,我不会在C#中做到这一点.你确定你有这个标签吗?如果可以解决,这是一个C问题.

640K只给你640*1024*8位,所以没有办法解决这个问题.也许这就是他/她正在寻找的答案.这些投资银行的采访有时候是一种思想游戏.


Ree*_*sey 4

如果速度不是必需的,您可以对文件中的适当位置进行冒泡排序。这只需要一次查看两行数据,不需要外部信息或存储。

  • 如果您对十亿行使用冒泡排序,那么速度最好*不*成为要求。:) (5认同)