利用分治法在n个元素的集合中选出最大值和次大值以及最小值和次小值,要求使用c语言
时间: 2024-05-19 22:14:39 浏览: 11
#include <stdio.h>
void findMinMax(int arr[], int low, int high, int* min, int* max) {
int mid, min1, max1, min2, max2;
if (low == high) {
*min = arr[low];
*max = arr[low];
return;
}
if (high - low == 1) {
if (arr[low] < arr[high]) {
*min = arr[low];
*max = arr[high];
} else {
*min = arr[high];
*max = arr[low];
}
return;
}
mid = (low + high) / 2;
findMinMax(arr, low, mid, &min1, &max1);
findMinMax(arr, mid + 1, high, &min2, &max2);
if (min1 < min2) {
*min = min1;
} else {
*min = min2;
}
if (max1 > max2) {
*max = max1;
} else {
*max = max2;
}
}
int main() {
int arr[] = { 5, 2, 6, 1, 3, 9, 4, 8, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
int min, max;
findMinMax(arr, 0, n - 1, &min, &max);
printf("Minimum element is %d\n", min);
printf("Maximum element is %d\n", max);
return 0;
}