输出数组中的最大值与次大值,以及它们的下标

#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;
}

时间复杂度:O(N)

空间复杂度:O(N)


对上述代码进行优化,即index_max和index_sec的初始化问题;

index_max=0;

index_sec=1;

for(i=1;i<10;++i) ... ...


这样会使代码看起来更简明。

猜你喜欢

转载自blog.csdn.net/qq2071114140/article/details/80057974