一尘不染

在最多n + log 2(n)-2个比较中找到数组中的第二大数字

algorithm

作为输入,您将得到n个不同数字的未排序数组,其中n是2的幂。给出一种算法,该算法标识数组中第二大的数字,并且最多使用n + log 2(n)-2个比较。


阅读 421

收藏
2020-07-28

共1个答案

一尘不染

  1. 首先比较n个元素数组中奇数和偶数位置的元素,然后确定每对中的最大元素。此步骤需要n / 2个比较。现在您只有n / 2个元素。继续逐对比较以获得n / 4,n / 8,…个元素。找到最大元素时停止。此步骤总共需要进行n / 2 + n / 4 + n / 8 + … + 1 = n-1个比较。
  2. 在上一步中,立即将最大元素与log 2(n)其他元素进行比较。您可以在log²(n)-1比较中确定这些元素中的最大元素。那将是数组中的第二大数字。

示例:由8个数字组成的数组[10,9,5,4,11,100,120,110]。

在级别1上进行比较:[10,9]-> 10 [5,4]-> 5,[11,100]-> 100, [120,110] -> 120。

在级别2上进行比较:[10,5]-> 10 [100,120] -> 120。

在级别3上进行比较: [10,120] -> 120。

最大值为120。立即与之比较:10(在3级上),100(在2级上),110(在1级上)。

步骤2应该找到最大值10、100和110。即110。这是第二大元素。

2020-07-28