【问题标题】:Number of comparison in Quick Sort快速排序中的比较次数
【发布时间】:2021-02-03 15:36:36
【问题描述】:

我想从理论上询问(不考虑循环中的比较)在排序数组的情况下比较次数有何不同。让有一个选择最后一个元素作为枢轴元素的实现。 现在给出一个长度为 10 的数组。这里我只谈索引。 1> 如果数组已排序:10 元素是主元,总比较数为 9。(对于特定实现): a)1 2 3 4 5 6 7 8 9 <10> comp = 9(考虑到第 9 个元素) b)1 2 3 4 5 6 7 8 <9> 10 comp = 8(枢轴是 9)....等等 所以总比较 = 9 + 8 + 7 +...1 ~ n^2

2> 如果我们得到一些排列,这样每次我们将枢轴作为数组的中间。 a)1 2 3 4 5 6 7 8 9 <10>comp = 9 (pivot = 10) 现在让它在中间分区 b) 我们得到这两个分区 1 2 3 4 <5> 6 7 8 <9> 10 comp = 4 + 3 = 7 ...等等。

我没有看到这两个有太大区别。

【问题讨论】:

    标签: quicksort


    【解决方案1】:

    问题在于递归的深度,而不是每个递归级别的比较次数。假设枢轴被排除在进一步的递归之外,第一种情况是 9 级递归,45 次比较,第二种情况是 3 级递归,19 次比较:

     1  2   3   4  <5>  6   7   8   9   10   -  9 compares
     1 <2>  3   4       6   7  <8>  9   10   -  7 compares
     1     <3>  4      <6>  7      <9>  10   -  3 compares
                                             ------------
                                               19 compares
    

    从递归中排除枢轴的快速排序的理想大小是 2^k-1 个元素。考虑 15 个元素(以十六进制显示)。第一种情况是 14 级递归,105 次比较。第二种情况是3级递归,34次比较:

     1   2   3   4   5   6   7  <8>  9   a   b   c   d   e   f   - 14 compares
     1   2   3  <4>  5   6   7       9   a   b  <c>  d   e   f   - 12 compares
     1  <2>  3       5  <6>  7       9  <a>  b       d  <e>  f   -  8 compares
                                                                 -------------
                                                                 - 34 compares
    

    【讨论】:

      猜你喜欢
      • 2014-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-06
      • 2014-12-25
      相关资源
      最近更新 更多