用分治法求数组最大数(c语言)

来源:百度知道 编辑:UC知道 时间:2024/06/26 00:25:18
在含有n个不同元素的集合中,找出他们的最大数(用分治法,c语言写程序)

#include <stdio.h>

#define N 21

int max(int a,int b){
if(a>b)
return a;
return b;
}

int getM(int * a,int l,int u){
if(u==l)
return a[u];
else{
return max(getM(a,l,(u+l)/2),getM(a,(u+l)/2+1,u) );
}
}

int main()
{
int a[N]={1,2,3,4,5,6,7,8,9,21,11,12,13,14,15,16,17,18,19,20,17};
printf("max=%d",getM(a,0,N-1));
return 0;
}

int max(int a,int b)
{
return((a>b)?a:b);
}

void Search(int a[],int *max0,int n)

{int g[30];

int i,m;

int max1,max2;

if(n==1)

{
*max0=a[0];
}

else if(n==2)

{
*max0=max(a[0],a[1]);
}

else

{ m=n/2;

for(i=0;i<m;i++)

g[i]=a[i];

Search(g,&max1,m);

for(i=0;i<n-m;i++)

g[i]=a[i+m];

Search(g,&max2