寻找第二问题

1.问题描述:在实际问题中,通常会遇到许多第二的问题。比如:第二名,第二大和第二小等。在已知的n个数据中找出其中第二小的数据。
2.根据问题描述,利用数组a[]存储已知数据,定义两个变量,min1和min2,分别用来存储数据中的第一小值和第二小值,对已知数字进行比较之后,便可从中选出第二小的数据,输出即可。此算法的时间复杂度为O(n).
3.算法说明

类型说明
算法second2(int a[ ],int n)
形参数组a:存放已知数据
形参变量n:已知数据的个数
变量min1:存放最小的数据
变量min2:保存第二小数据

4.代码实现及分析

#include<stdio.h>
int second2(int a[ ],int n)    //求第二小的函数
{
 int i,min1,min2;
 if(a[0]<a[1])   //如果a[0]小于a[1]
 {
 min1=a[0];     //把a[0]赋给最小值
 min2=a[1];     //a[1]赋给第二小值
   } 
   else {
    min1=a[1];
    min2=a[0];
   }
   for(i=2;i<n;i++)     //i从第二个数开始遍历
    if(a[i]<min2)        //若某个数小于min2
   {
    if(a[i]<min1)         //并且这个数也小于min1
     {
     min2=min1;        //把原来最小的数赋给第二小的数
     min1=a[i];           //把该数的值赋给最小值
      }
    else                   //否则,若该数只小于第二小,并没有小于最小值
     min2=a[i];         //则把它的值赋给第二小值
   }
    return (min2);       //将第二小的值返回
   } 
 /*主函数,输入m个数,保存在数组a中,调用second2函数,输出第二小的值*/
 int main(){        
 int a[100],i,m;
  printf("请输入数据个数m:");
 scanf(" %d",&m);
 printf("请输入m个已知数据:");
 for(i=0;i<m;i++) 
 scanf("%d",&a[i]);
 printf("第二小的数据为%d",second2(a,m));
}

5.运行结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值