下面是一个C语言算法,用于求整型数组 r[n]
的最大值和最小值,且确保比较次数不超过 3n/2
次。
#include <stdio.h>
// 声明求最大值和最小值的函数
void findMaxMin(int r[], int n, int *max, int *min) {
if (n <= 0) {
// 处理无效输入的情况
*max = *min = 0;
return;
}
*max = *min = r[0]; // 初始化最大值和最小值为数组的第一个元素
// 迭代数组,每次迭代比较两个元素,更新最大值和最小值
for (int i = 1; i < n; i++) {
if (i % 2 == 0) { // 如果 i 是偶数,比较并可能更新最大值
if (r[i] > *max) {
*max = r[i];
} else if (r[i] < *min) { // 如果当前元素不是最大值,则检查是否是最小值
*min = r[i];
}
} else { // 如果 i 是奇数,比较并可能更新最小值
if (r[i] < *min) {
*min = r[i];
} else if (r[i] > *max) { // 如果当前元素不是最小值,则检查是否是最大值
*max = r[i];
}
}
}
}
int main() {
int n;
printf("请输入数组的大小: ");
scanf("%d", &n);
int r[n]; // 定义数组
printf("请输入数组的元素:\n");
for (int i = 0; i < n; i++) {
scanf("%d", &r[i]);
}
int max, min;
findMaxMin(r, n, &max, &min);
printf("数组的最大值是: %d\n", max);
printf("数组的最小值是: %d\n", min);
return 0;
}
3n/2
次。n > 0
)。