寻找第二问题

2019-05-16    20:37:06

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)     //second2函数找出第二小值
{
    int i,min1,min2;
    if(a[0]<a[1])             //若第1个数小于第2个数
    {
    min1=a[0];                //将a[0]赋给最小值
    min2=a[1];                //第a[1]赋给第二小值
   } 
   else {
       min1=a[1]; 
       min2=a[0];
   }
   for(i=2;i<n;i++)                  //从三个数开始遍历完
       if(a[i]<min2)                 //若第i个数小于第二小值
     {
       if(a[i]<min1){                 //并且小于最小值
           min2=min1;                 //将最小值赋给第二小值
           min1=a[i];                 //将第i个数赋给最小值
       }
       else
           min2=a[i];                //否则,若它位于最小值与第二小值中间,将它赋给第二小值
    }
    return (min2);                   //返回第二小值
   } 
 /*主函数输入n个数,存储在a数组中,调用second2函数,找出第二小值。*/ 
 int main(){
    int a[100],i,m;
     printf("请输入数据个数n:");
    scanf(" %d",&m);
    printf("请输入n个已知数据:");
    for(i=0;i<m;i++) 
    scanf("%d",&a[i]);
    printf("第二小的数据为%d",second2(a,m));
}

5.运行结果

原文地址:https://www.cnblogs.com/laurarararararara/p/10877852.html