前言
数组是最基本的数据结构,学会使用数组也是程序员必须要会的。今天主要聊聊,给定一个数组,如何同时求出最大值、最小值、次大值。常规的做法是遍历一遍,求出最大值、最小值。
求数组的最大值、最小值、次大值
问题:在一个数组中同时寻找最大值、最小值和第二大值。
#include <stdio.h>
void max_and_min(int *arr, int num)
{
int max = arr[0];//假设第一个为最大值
int min = arr[0];//假设第一个为最小值
int i = 0;
for (i = 0; i < num; i++) //遍历
{
if (arr[i] > max)
max = arr[i];
if (arr[i] < min)
min = arr[i];
}
printf("max = %d, min = %d \n", max,min);
}
int max_and_second(int *arr, int *sec_max, int num)
{
int max = arr[0];//假设第一个为最大值
int second = arr[0];//假设第一个为次大值
int i = 0;
for (i = 0; i < num; i++)
{
if ( arr[i] > max)
{
*sec_max = max;
max = arr[i];
}
//由于上面的比较若max比后面的值都大,若有小于max但是
//大于sec_max的值的话将不会执行,于是添加以下判断
if ( arr[i] > *sec_max && arr[i] < max)
{
*sec_max = arr[i];
}
}
if (max == *sec_max)
{
*sec_max = arr[1];
for (i = 1; i < num; i++)
{
if (*sec_max < arr[i])
{
*sec_max = arr[i];
}
}
}
return max;
}
int main(int argc, char const *argv[])
{
int sec_max = 0;
int max = 0;
int arr[] = {10,23,4,56,13,57,76,34,90,43};
int len = sizeof(arr) / sizeof(arr[0]);
max_and_min(arr,len);
max = max_and_second(arr, &sec_max, len);
printf("max = %d, second = %d \n", max,sec_max);
return 0;
}
输出结果:
自动申请数值大小。实现最大、最小、次大值。
#include <stdio.h>
#include <stdlib.h>
void max_and_min(int *arr, int num)
{
int max = arr[0];//假设第一个为最大值
int min = arr[0];//假设第一个为最小值
int i = 0;
for (i = 0; i < num; i++) //遍历
{
if (arr[i] > max)
max = arr[i];
if (arr[i] < min)
min = arr[i];
}
printf("max = %d, min = %d \n", max,min);
}
int max_and_second(int *arr, int *sec_max, int num)
{
int max = arr[0];//假设第一个为最大值
int second = arr[0];//假设第一个为次大值
int i = 0;
for (i = 0; i < num; i++)
{
if ( arr[i] > max)
{
*sec_max = max;
max = arr[i];
}
//由于上面的比较若max比后面的值都大,若有小于max但是
//大于sec_max的值的话将不会执行,于是添加以下判断
if ( arr[i] > *sec_max && arr[i] < max)
{
*sec_max = arr[i];
}
}
if (max == *sec_max)
{
*sec_max = arr[1];
for (i = 1; i < num; i++)
{
if (*sec_max < arr[i])
{
*sec_max = arr[i];
}
}
}
return max;
}
int main(int argc, char const *argv[])
{
int sec_max = 0;
int max = 0;
int *data = NULL;
int i = 0;
int num = 0;
printf("Number of input elements, The recommended value is(1 ~ 100)\n");
scanf("%d",&num); //为元素分配多少内存
data = (int *)calloc(num, sizeof(int));
if (data == NULL)
{
printf("Error!\n");
exit(0);
}
for (i = 0; i < num; i++) //用户输入
{
printf("Please enter number %d : ",i+1);
scanf("%d",data + i);
}
max_and_min(data,num);
max = max_and_second(data, &sec_max, num);
printf("max = %d, second = %d \n", max,sec_max);
return 0;
}
输出结果: