问题:假设有2^k个****(前提)选手进行竞技淘汰赛,最后决出冠军的选手。
#include<stdio.h>
#include <iostream>
#include<iomanip>
using namespace std;
bool Comp(int r1,int r2)
{
if(r1>r2)
return true;
else
return false;
}
int Game(int r[],int n){
int i=n;
while(i>1){
i=i/2;
for(int j=0;j<i;j++)
{
if(Comp(r[j+i],r[j]))
r[j]=r[j+1];
}
}
return r[0];
}
void main(){
int m[]={45,15,565,1546,156,78,566,32,25,55,44,69,75,23,85,96};
int max=Game(m,16);
cout<<"淘汰赛冠军最大值:"<<max<<endl;
}
时间复杂度:O(n)
运行结果: