【发布时间】:2010-10-30 03:00:32
【问题描述】:
UNIX sort 命令可以像这样对非常大的文件进行排序:
sort large_file
排序算法是如何实现的?
怎么不会造成内存过度消耗?
【问题讨论】:
-
这很有趣。我真的不知道它是如何工作的,但我有一个猜测。它可能会将每个键的第一个字符放入二叉树中,当发生冲突时,它也会使用键的下一个字符,因此它不会保存比需要更多的键。然后它可以使用每个键将偏移量保存到文件中,以便它可以按顺序查找并打印每一行。
-
实际上,@ayaz 如果您不是在磁盘上而是在管道中对文件进行排序,它会更有趣,因为很明显您不能简单地对输入数据进行多次传递。
-
为什么 SO 上的每个人都觉得总要猜测?
-
您可以对输入进行多次传递 - 您只需读取所有输入,将其写入磁盘,然后对磁盘文件进行排序。
-
@Neil - 从上下文来看,很明显他试图对文件的内容而不是文件名进行排序(对于一个名称来说,这是没有意义的)。我只是想在不过多改变上下文的情况下改进问题,以便它得到答案而不是因为一个简单的错误而被否决。