C语言利用分治算法求一个n运算数组的最大元素和最小元素 【输入形式】输入两行,第一行为一个整数n(n<100).第二行为数组的n个元素; 【输出形式】输出两个数,一个是数组最大元素的值,一个是数组最小元素的值,中间用空
时间: 2023-12-03 21:45:52 浏览: 125
分治算法实验(用分治法查找数组元素的最大值和最小值).doc
格隔开。
以下是 C 语言的代码实现:
```c
#include <stdio.h>
void findMaxAndMin(int arr[], int start, int end, int *max, int *min) {
if (start == end) {
*max = arr[start];
*min = arr[start];
return;
}
if (end - start == 1) {
if (arr[start] > arr[end]) {
*max = arr[start];
*min = arr[end];
} else {
*max = arr[end];
*min = arr[start];
}
return;
}
int mid = (start + end) / 2;
int max1, min1, max2, min2;
findMaxAndMin(arr, start, mid, &max1, &min1);
findMaxAndMin(arr, mid + 1, end, &max2, &min2);
if (max1 > max2) {
*max = max1;
} else {
*max = max2;
}
if (min1 < min2) {
*min = min1;
} else {
*min = min2;
}
}
int main() {
int n;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
int max, min;
findMaxAndMin(arr, 0, n - 1, &max, &min);
printf("%d %d\n", max, min);
return 0;
}
```
首先定义了一个 `findMaxAndMin` 函数来求解最大值和最小值。在该函数中,通过分治算法将数组不断地分成两半,分别求解左半部分和右半部分的最大值和最小值,然后将两部分的最大值和最小值进行比较得出整个数组的最大值和最小值。
在 `main` 函数中,先读入数组的长度和元素,然后调用 `findMaxAndMin` 函数求解最大值和最小值,最后输出结果。
阅读全文