#include <stdio.h>
int main(void)
{
int index_max,index_sec,i;
int a[10];
for(i=0;i<10;++i)
{
scanf("%d",a+i);
}
if(a[0]>a[1])
{
index_max=0;
index_sec=1;
}
else
{
index_max=1;
index_sec=0;
} //设置两个变量用来存储最大值与次大值下标
for(i=2;i<10;++i)
{
if(a[i]>a[index_max]) //用i跑数组,a[i]比最大值大,则a[index_max]是当前次大值,a[i]是最大值,下标交换时注意顺序
{
index_sec=index_max;
index_max=i;
}
else
if(a[i]>a[index_sec]) //若a[i]没有最大值大,但是比次大值大,则a[i]是当前次大值,index_sec存当前下标
index_sec=i;
}
printf("max=%d and it's index=%d\nsecond=%d and it's index=%d",a[index_max],index_max,a[index_sec],index_sec);
return 0;
}
int main(void)
{
int index_max,index_sec,i;
int a[10];
for(i=0;i<10;++i)
{
scanf("%d",a+i);
}
if(a[0]>a[1])
{
index_max=0;
index_sec=1;
}
else
{
index_max=1;
index_sec=0;
} //设置两个变量用来存储最大值与次大值下标
for(i=2;i<10;++i)
{
if(a[i]>a[index_max]) //用i跑数组,a[i]比最大值大,则a[index_max]是当前次大值,a[i]是最大值,下标交换时注意顺序
{
index_sec=index_max;
index_max=i;
}
else
if(a[i]>a[index_sec]) //若a[i]没有最大值大,但是比次大值大,则a[i]是当前次大值,index_sec存当前下标
index_sec=i;
}
printf("max=%d and it's index=%d\nsecond=%d and it's index=%d",a[index_max],index_max,a[index_sec],index_sec);
return 0;
}
时间复杂度:O(N)
空间复杂度:O(N)
对上述代码进行优化,即index_max和index_sec的初始化问题;
index_max=0;
index_sec=1;
for(i=1;i<10;++i) ... ...
这样会使代码看起来更简明。