找出数组中第二大和第二小的值,并输出它们对应的索引
求代码,求完整代码,用简单易理解的方法
c语言,谢谢!
对数组进行两边遍历,第一遍找出最大值和最小值,然后将其更改为两者的平均值;第二次继续找最大值和最小值,那么就是第二大和第二小了。或者第一遍只需记录最大值和最小值的下标,第二次遍历时跳过这两个下标即可
#include <stdio.h>
int main()
{
int n,a[1000],i;
int max0=0,min0=0,max1=-1,min1=-1;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(i=1;i<n;i++)
{
if(a[max] < a[i])
max = i;
if(a[min] > a[i])
min = i;
}
for(i=0;i<n;i++)
{
if(i==min || i==max)
continue;
if(max=-1 || min1==-1)
max1= min1 = i;
else
{
if(a[max1] < a[i])
max1 = i;
if(a[min1] > a[i])
min1 = i;
}
}
printf("第二最大值为a[%d] = %d,第二最小值为a[%d]=%d",max1,a[max1],min1,a[min1]);
return 0;
}
对数组排序后,取第二个位置对应的元素和倒数第二个位置对应的元素。