用C语言设计一个算法,找出有n个元素的整型的一维数组中的最大值和次最大值。
时间: 2024-09-22 21:07:24 浏览: 39
为了在C语言中找到一个包含n个元素的整型一维数组中的最大值和次大值,你可以使用一种称为“分治法”的策略。这里提供一个简单的双指针算法:
```c
#include <stdio.h>
// 定义两个函数,一个用于寻找最大值,另一个查找次大值
void findMaxAndSecondMax(int arr[], int n, int *max, int *secondMax) {
// 初始化最大值和次大值为数组的第一个元素
if (arr[0] > *max) {
*secondMax = *max;
*max = arr[0];
} else if (arr[0] > *secondMax && arr[0] != *max) {
*secondMax = arr[0];
}
// 使用双指针,一个指向开始,另一个指向当前最大值之后的位置
int i = 1, j = 1;
while (j < n) {
// 如果当前元素大于最大值,更新最大值和次大值
if (arr[j] > *max) {
*secondMax = *max;
*max = arr[j];
}
// 否则,如果当前元素大于次大值但不大于最大值,更新次大值
else if (arr[j] > *secondMax && arr[j] != *max) {
*secondMax = arr[j];
}
j++;
}
}
int main() {
int arr[] = {5, 3, 9, 1, 7, 4};
int n = sizeof(arr) / sizeof(arr[0]);
int max, secondMax;
// 调用函数并打印结果
findMaxAndSecondMax(arr, n, &max, &secondMax);
printf("最大值: %d, 次大值: %d\n", max, secondMax);
return 0;
}
```
在这个例子中,`findMaxAndSecondMax` 函数接受一个数组、它的长度以及指向最大值和次大值的指针。通过遍历数组,我们可以在常数时间内找到这两个值。
阅读全文