如何快速排序缓存局部性而不是mergesort?

时间:2018-01-30 03:34:10

标签: algorithm language-agnostic quicksort mergesort

In answers related to quicksort vs mergesort,通常声明quicksort利用缓存位置(引用位置)优于mergesort

由于这两种方法遵循分而治之的方法,我不明白quicksort如何更适合缓存。任何人都可以提供与此相关的更多见解吗?

此外,还有关于in-place merge sort的说明。如果这是实用的(我不知道是否),合并排序也可以缓存友好吗?

1 个答案:

答案 0 :(得分:5)

如果您正在对适合缓存的数组进行排序,那么quicksort将需要更少的内存访问,因为mergesort需要分配第二个数组。 Quicksort会将数组加载到缓存中,然后在不等待内存的情况下继续运行。 Mergesort将支付访问第二个阵列的额外费用。

如果您要对不适合缓存的数组进行排序,那么快速排序仍然可以从局部视点获胜,因为当它们递归以对较小的部分进行排序时,两种算法很快就会到达那些部分适合缓存,对于那些快速排序,上述参数更快。在不适合缓存的排序的较高级别上,quicksort和mergesort从缓存局部性的角度来看几乎等效。