分治理法求数组最大值

Posted blfbuaa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分治理法求数组最大值相关的知识,希望对你有一定的参考价值。

如今给出一个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("\n"); } 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\n",_max,_min); return 0; }

以下是几次执行的结果.

技术分享

以上是关于分治理法求数组最大值的主要内容,如果未能解决你的问题,请参考以下文章

分治法求一个数组中最大最小值

分治法求最大最小

利用分治法求n个数的最大连续和

分治法求解最大子段和问题

分治法求最大子序列

如何使用分治法求众数