c语言里输入第二大的数

输入 结果
1 2 3 4 5
4
1 2 45 45 30
30
23 23 23 23 23
-34 -56 -112 -57 -67
-56

int secmax1(int *t,int n)
{
    int j,max=t[0],min=t[0],secmax;
    for(j=0; j<n; j++)
    {
        if(t[j]<=min)
        {
            min=t[j];
        }
    }
    int pos=0;
    for(j=0; j<n; j++)
    {
        if(t[j]>=max)
        {
            max=t[j];
            pos=j;  
        }
    }
    t[pos]=min;
    secmax=min;
    for(j=0; j<n; j++)
    {
        if(t[j]>=secmax)
        {
            secmax=t[j];  
        }
    }
    return secmax;
}

设置两个变量,先将存储前二大的数的变量设置成最小值
然后再用2个变量来判断数组中是否有2个不同的值(先将他们都赋值为数组第一个数)
int temp1 = nums[0],temp2 = nums[0];
循环找到前二大的数,要满足temp2与temp1不相同
if(nums[i] != temp1)
{
temp2 = nums[i];
}
如果找到一个更大的数,则将当前的max变成two
if(nums[i] > max)
{
two = max;
max = nums[i];
}
//如果这个数不是更大的数,则与第二大的数比较
else if(nums[i] < max && nums[i] > two)
{
two = nums[i];
}
}
if(temp1 == temp2 ) return max;
else return two;
}