分治理法求数组最大值

如今给出一个n个元素的书组,元素个数n。须要求出最大最小值.

方法1.

用max,min。分别记录数组最大最小值,顺序扫描数组,不断替换更新max。min,(max,min的初始值都为数组中的第一个元素)

方法2.

1.假设数组中仅仅有一个元素。那么它是最大也是最小值

2.否则数组中多于一个数。则能够求出左边的最大最小值,右边的最大最小值.然后该区间的最大值是max(lmax,rmax),最小值是min(lmin,rmin)

详细例如以下(n个数字由随机生成).

#include <stdio.h>
#include <time.h>
int getmax(int a,int b){
        return a>b?a:b;
}
int getmin(int a,int b){
        return a<b?

a:b; } void print(int a[],int n){ int i; for(i=0;i<20;i++) printf("%d ",a[i]); printf(" "); } void maxmin(int a[],int l,int r,int * _max,int * _min){ if(r>l){ int m=(l+r)/2; int _lmin,_rmin,_lmax,_rmax; maxmin(a,l,m,&_lmax,&_lmin); maxmin(a,m+1,r,&_rmax,&_rmin); *_max=getmax(_lmax,_rmax); *_min=getmin(_lmin,_rmin); }else{ *_max=*_min=a[l]; } } int creat(int a[],int n,int m){ int i; srand(time(NULL)); for(i=0;i<n;i++) a[i]=rand()%m-m/2; return n; } int main(){ int n,i; int a[100]; int _min,_max; creat(a,20,100); print(a,20); maxmin(a,0,19,&_max,&_min); printf("max:%d min:%d ",_max,_min); return 0; }

以下是几次执行的结果.


原文地址:https://www.cnblogs.com/blfbuaa/p/7255488.html