算法1
依次找出最大值和次大值的行号
时间复杂度 O(m*n)
C++ 代码
```
include[HTML_REMOVED]
using namespace std;
int main()
{
int a[4][5],b[4][5],i,j;
for(j=0;j<5;j++)
{
b[0][j]=0;
b[1][j]=1;
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
cin>>a[i][j];
if(a[i][j]>a[b[0][j]][j])
{
b[0][j]=i;
b[1][j]=(i+1)%4;
}
}
}
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(a[i][j]>a[b[1][j]][j]&&i!=b[0][j])
{
b[1][j]=i;
}
}
}
for(j=0;j<5;j++)
{
if(b[0][j]>b[1][j])
{
swap(b[0][j],b[1][j]);
}
}
for(i=0;i<2;i++)
{
for(j=0;j<5;j++)
{
cout<<a[b[i][j]][j]<<' ';
}
cout<<endl;
}
}
用b[0][j]保存每列最大值行号,b[1][j]保存每列次大值行号。若b[0][j]>b[1][j],交换他们即可。