基本方法 使用sort函数
#include<iostream>
#include<algorithm>
using namespace std;
#define N 5
int main(){
int a[N] = {5,1,3,6,2};
sort(a,a+5);
cout<<a[4]<<" "<<a[3]<<endl;
}
使用打擂台
#include<iostream>
#define N 5
int main(){
int a[N] = {5,1,3,6,2};
int max1 = 0;//最大值
int max2 = 0;//次大值
for(int i=0;i<N;i++){
//数字比最大值还大,将最大值给次大值
if(a[i]>max1){
max2 = max1;
max1 = a[i];
}
else if(a[i]>max2){
max2 = a[i];
}
}
std::cout<<max1<<" "<<max2<<std::endl;
}
使用分治算法
void max1max2(int a[],int low,int high,int &max1,int &max2){
if(low>high) return ;
//剩下一个数
else if(low == high) {
max1 = a[low];
max2 = INF;
}
//剩下两个数
else if(low == high - 1){
max1 = max(a[low],a[high]) ;
max2 = min(a[low],a[high]);
}
//分解
else {
int mid = (high+low)/2;
int leftmax1, leftmax2;
max1max2(a,low,mid,leftmax1,leftmax2);
int rightmax1,rightmax2;
max1max2(a, mid+1,high,rightmax1,rightmax2);
if(leftmax1>rightmax1){
max1 = leftmax1;
max2 = max(leftmax2,rightmax1);
}
else {
max1 = rightmax1;
max2 = max(leftmax1,rightmax2);
}
}
}