In answers related to quicksort
vs mergesort
,通常声明quicksort
利用缓存位置(引用位置)优于mergesort
。
由于这两种方法遵循分而治之的方法,我不明白quicksort
如何更适合缓存。任何人都可以提供与此相关的更多见解吗?
此外,还有关于in-place merge sort的说明。如果这是实用的(我不知道是否),合并排序也可以缓存友好吗?
答案 0 :(得分:5)
如果您正在对适合缓存的数组进行排序,那么quicksort将需要更少的内存访问,因为mergesort需要分配第二个数组。 Quicksort会将数组加载到缓存中,然后在不等待内存的情况下继续运行。 Mergesort将支付访问第二个阵列的额外费用。
如果您要对不适合缓存的数组进行排序,那么快速排序仍然可以从局部视点获胜,因为当它们递归以对较小的部分进行排序时,两种算法很快就会到达那些部分做适合缓存,对于那些快速排序,上述参数更快。在不适合缓存的排序的较高级别上,quicksort和mergesort从缓存局部性的角度来看几乎等效。