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

#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) ... ...


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值