2010-09-16 159 views
0

哪一个更好? 说1GB内存和100GB文件进行排序。外部排序与k路合并与快速排序

的10路合并需要一个实例: - 100 1GB负载,随后用10个* 10 + 10 * 100 100MB负载(10路,随后用10路合并)

快速排序需要100 * 7 * 2(nlogn)1GB负载?

+0

快速排序意味着没有一种'批量加载大小'(这与n-way合并排序相反)。也许你可以改进这个问题。 – 2010-09-16 19:47:22

+0

你能详细说说吗?你的意思是快速排序不会保证像合并排序一样的固定数量的负载? – snk 2010-09-16 20:05:01

回答

2

合并排序在处理大数据时更有效率。

的原因是因为快速排序是,这意味着你必须先处理100GB顶底的做法, ,比50GB的过程* 2 ... 就不可能适应整个数据到内存中,当你有大数据。

以其他方式,合并排序是一种自下而上的方法,正如您所描述的那样,您可以将数据 分成可以放入内存的小批量,并将它们合并到缓冲区中。

+0

quicksort有一个很有名的版本,这意味着你不需要在内存中放置超过2个元素 – user804649 2015-03-03 16:29:53

0

主要瓶颈实际上是读取和写入硬盘驱动器。我们从硬盘读取每个元素两次,并从硬盘写入两个元素。一次用于对块进行排序,然后每次再进行一次用于多路合并。

相比之下,快速排序将在平均O(log n)次时读/写每个元素到硬盘。