找出N个数组中第二大的数,需要比较多少次呢?

时间:2020-11-26 15:11:00

方法一、比较笨的方法

先找到本数组中的最大数X,需要n-1次比较,再在剩下的数组中去找最大数X’,需要n-2次比较

则X’就是第二大的数,这需要(n-1) + (n-2)次比较

方法二、我们也可以在数组中,两数结合,分别求出最大值 和 次大值,之后每两个数结合求出的最值 在相互比较,得到最值得最大值 和 次大值

具体思路:

把数组中的每两个元素分为一组,每组中的最大数为F,第二大数为S。

假设相邻两组的最大数和第二大数分别是:Fleft,Si 和 Fright,Sj,。

则这两组合并为一组后,其中最大数和第二大数可能是:

1、若Fi > Fj,则最大数是Fi;

      若Si >Fj,则第二大数是Si;否则,第二大数是Fj

2、若Fi< Fj,则最大数是Fj

      若Fi>Sj,则第二大数是Fi;否则,第二大数是Sj

比较次数:共有N/2组,每组需要比较倆次得出本组的最大数和第二大数;共需比较N/2 * 2次。

方法三、分治法

思路:和上面的思路是一样的

把数组分成两部分,其最大数和第二大数分别是:Fleft,Sleft,Fright,Sright。合并时的情况可能为:

1、Fleft > Fright,最大数是Fleft;若Sleft>Fright,则第二大数是Sleft,否则第二大数是Fright;

2、Fleft < Fright,最大数是Fright;若Fleft>Sright,则第二大数Fleft,否则第二大数是Sright。