快速排序中位数选择

时间:2011-04-09 15:29:55

标签: algorithm sorting quicksort

我们可以选择3元素分区的中位数来实现快速排序。同样,我们可以选择5,7或11元素的中位数来实现快速排序吗?如果是这样,那怎么??

1 个答案:

答案 0 :(得分:6)

您应该查看Median of Medians algorithm。这是一个线性时间算法,具有以下重现...

T(n) ≤ T(n/5) + T(7n/10) + O(n)

......这是O(n)。算法详细说明......

  1. 将列表划分为每个
  2. 5个元素的n / 5个子序列
  3. 通过蛮力找到每个列表的中位数。将会有n / 5
  4. 让m_1,...,m_n / 5成为这些中位数。
  5. 递归地找到这些中位数的中位数。这将是1个元素,枢轴!
  6. ......和一些伪代码......

    MedianOfMedians (A[1],...,A[n]) 
    begin
        for i=1 to n/5 do {
            let m_i be the median of A[5i − 4], A[5i − 3],..., A[5i];
        }
        pivot = Select(m1,...,m_n/5, n/10); // the pivot
        return pivot
    end
    

    <强>参考

    我希望这会有所帮助 Hristo