用c语言写利用分治算法求一个n运算数组的最大元素和最小元素 【输入形式】输入两行,第一行为一个整数n(n<100).第二行为数组的n个元素; 【输出形式】输出两个数,一个是数组最大元素的值,一个是数组最小元素的值,中间用空格隔开 【样例输入】 8 8 3 2 9 7 1 5 4 【样例输出】 9 1 【样例说明】 数组中有8个元素,最大值为9,最小值为1 ; 【算法伪代码】 image.png #include <stdio.h> #include <stdlib.h> void maxmin(int A[],int l,int r,int *maxval,int *minval) { } int main() { int maxv,minv; int A[100]; int i,n; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%d",&A[i]); } maxmin(A,0,n-1,&maxv,&minv); printf("%d %d",maxv,minv); return 0; }
时间: 2023-11-28 13:51:19 浏览: 67
分治算法实验(用分治法查找数组元素的最大值和最小值).pdf
5星 · 资源好评率100%
以下是利用分治算法求一个n运算数组的最大元素和最小元素的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
void maxmin(int A[], int l, int r, int *maxval, int *minval)
{
if (l == r) // 只有一个元素
{
*maxval = A[l];
*minval = A[l];
return;
}
if (l + 1 == r) // 只有两个元素
{
if (A[l] > A[r])
{
*maxval = A[l];
*minval = A[r];
}
else
{
*maxval = A[r];
*minval = A[l];
}
return;
}
int mid = (l + r) / 2;
int max1, min1, max2, min2;
maxmin(A, l, mid, &max1, &min1);
maxmin(A, mid + 1, r, &max2, &min2);
*maxval = max1 > max2 ? max1 : max2;
*minval = min1 < min2 ? min1 : min2;
}
int main()
{
int maxv, minv;
int A[100];
int i, n;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%d", &A[i]);
}
maxmin(A, 0, n - 1, &maxv, &minv);
printf("%d %d", maxv, minv);
return 0;
}
```
其中,maxmin函数中的分治算法思想是:将数组A[l...r]平均分成两个子数组A[l...mid]和A[mid+1...r],然后分别递归求解这两个子数组的最大值和最小值,最后将这两个子数组的最大值和最小值合并成整个数组的最大值和最小值。递归的结束条件是只有一个元素或者只有两个元素。
阅读全文