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.运行结果