在Burst sort论文作者声称Quicksort不是很高效的排序算法。正如作者所提到的那样
然而,Quicksort的一些缺点仍然存在。每个角色都要多次检查,直到它等于 pivot分区。每次在其中包含一个字符时,都会重新访问每个字符串 检查,并在第一次分区后进行这些访问 有效随机。对于大量字符串,缓存率 失误可能很高。
我还发现ppt表示快速排序和合并排序是缓存Oblivious算法,但Wikipedia和few paper声称快速排序非常有效。
我无法理解除了整数数据的强制错过之外快速排序缓存错过的情况。任何人都可以详细解释快速排序缓存未命中?
答案 0 :(得分:5)
您引用的段落主要是在排序字符串时讨论问题。如果快速排序期间的字符串数组作为指针存储为数组(这基本上是唯一简单的方法),那么在快速排序的第一次传递之后,存储在数组中附近位置的指针可能指向内存相距很远的位置,即使原始的字符串数组是在连续的内存中分配的。似乎有理由认为排序字符串可以被视为一个特殊问题,而专门的算法可以提高缓存效率。
如果您正在排序一个数组,比如整数,那么您实际上是在快速排序期间比较和交换数组中的数据,因此当您访问数组中的附近位置时,您将获得缓存优势。在这种情况下,我的理解与你在维基百科和其他地方发现的相同,即quicksort相当缓存效率。基本上这是因为quicksort的每次传递都以高度本地化的方式处理其数组部分。