分治法求数组最大最小值[精华]
西 安 邮 电 大 学
,计算机学院,
课内实验报告
实验名称: 分治法求数组最大最小值
专业名称: 软件工程
班 级:
学生姓名:
学号(8位):
指导教师:
实验日期: 2014年10月28日
一. 实验目的及实验环境
Linux (Ubuntu)
二. 实验内容
用分治法求数组的最大最小值。 三(实验设计
调用种子数产生随机数比较数据的最大最小值。其用分治法将数组数分半比
较,依次比较知道产生最小值。
重要代码:
Mid=(m+n)/2;
Max_Min(a,m,Mid,&Max1,&Min1);
Max_Min(a,Mid+1,n,&Max2,&Min2);
if(Max1>Max2)
*Max=Max1;
else
*Max=Max2;
if(Min1>Min2)
*Min=Min2;
else
*Min=Min1;
四 运行结果
五(总结
1( 实验过程中遇到的问题及解决办法;
开始只能对自定义的数组比较数据的最大最小值,后来通过查找资料利用了
种子数产生所及数,将随机产生的数据比较其中的最大最小值。
2( 对设计及调试过程的心得体会。
在调试程序时要认真仔细,熟悉掌握程序的细节 六(源代码
#include
#include
void max_min(int a[],int m,int n,int *max,int *min) {
int max1,max2,min1,min2,mid;
if(m==n)
{
*max=a[m];
*min=a[m];
}
else if(m==n-1)
{
if(a[m]>a[n])
{
*max=a[m];
*min=a[n];
}
else{
*max=a[n];
*min=a[m];
}
}
else{
mid=(m+n)/2;
max_min(a,m,mid,&max1,&min1);
max_min(a,mid+1,n,&max2,&min2);
if(max1>max2)
*max=max1;
else
*max=max2;
if(min1>min2)
*min=min2;
else
*min=min1;
}
}
main()
{ int n;
printf("请输入数组的大小N(整数):");
scanf("%d",&n);
int i,a[n],max,min;
printf("数组的各元素为:");
srand((unsigned)time(NULL));
for(i=0;i