单链表实现锦标赛算法
#include<iostream>
#include<Windows.h>
using namespace std;
//锦标赛算法求第二大的数(不考虑数组中存在多数等值情况下)
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
void InsertToBottom(int t,int i,LNode* d){
LinkList p=new LNode;
p->data=d[i].data;
p->next=NULL;
if(d[t].next==NULL||d[t].next->data<d[i].data)d[t].next=p;
}
void championShips(int n,LNode* d){
int t=-1;
for(int i=0;i<n-1;i+=2){
int winner;
if(d[i].data>d[i+1].data){InsertToBottom(i,i+1,d);winner=i;}
else{InsertToBottom(i+1,i,d);winner=i+1;}
d[++t]=d[winner];
}
if(n%2==1)d[++t]=d[n-1];
if(t>=1)championShips(t+1,d);
else cout<<"第二大的数是:"<<d[0].next->data<<endl;
}
int main(){
int n=9;
LNode* d=new LNode[n];
int p[n]={4,1,12,412,17,41,178,21,125};
for(int i=0;i<n;++i){
d[i].data=p[i];
d[i].next=NULL;
}
championShips(n,d);
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律