我正在研究基于Select 算法的快速排序变体实现的快速排序变体实现,以选择一个好的枢轴元素。传统的智慧似乎是将数组划分为 5 个元素块,取每个块的中值,然后递归地对生成的中值应用相同的块方法以获得“中值的中值”。
让我困惑的是选择 5 元素块而不是 3 元素块。对于 5 元素块,在我看来,您执行n/4 = n/5 + n/25 + n/125 + n/625 + ...
的是 5 的中位数操作,而对于 3 元素块,您执行n/2 = n/3 + n/9 + n/27 + n/81 + ...
的是 3 的中位数操作。由于每个 5 的中位数是 6 次比较,每个 3 的中位数是 2 次比较,这导致3*n/2
使用 5 的中位数和n
进行比较和使用中位数 3 进行比较。
谁能解释这种差异,以及使用 5 元素块的动机是什么?我不熟悉应用这些算法的通常做法,所以也许有一些方法可以减少一些步骤,并且仍然“足够接近”中位数以确保良好的枢轴,并且这种方法更适用于 5 元素块?