数据结构(C)---分治法求最大值最小值
2014-05-15 18:57
141 查看
#include <stdio.h>
int main()
{
void max_min( int s[] , int *max ,int *min);
int max , min ;
int n;
scanf("%d" ,&n);
int num
;
while( n-- )
{
scanf("%d" , &num[i]);
}
max_min(num , &max , &min);
printf("max=%d , min=%d" , max,min);
return 0;
}
void max_min( int s[] , int *max ,int *min)
{
int max1 , min1 , max2 , min2;
if(sizeof(s)/sizeof(int)==2) //判断数据个数 若数据个数是2个 那么就直接进行比较
{
if(*s>*(s+1))
{
*max=*s;
*min =*(s+1);
}else{
*max=*(s+1);
*min =*s;
}
}else{ //数据个数大于2个 将数据分为2组 进行递归调用
max_min(s , &max1, &min1); //数据组1
max_min(s+sizeof(s)/sizeof(int)/2 , &max2 , &min2); //数据组2
if(max1>max2)
{
*max=max1;
}else{
*max=max2;
}
if(min1>min2)
{
*min=min2;
}else
*min=min1;
}
}
}
int main()
{
void max_min( int s[] , int *max ,int *min);
int max , min ;
int n;
scanf("%d" ,&n);
int num
;
while( n-- )
{
scanf("%d" , &num[i]);
}
max_min(num , &max , &min);
printf("max=%d , min=%d" , max,min);
return 0;
}
void max_min( int s[] , int *max ,int *min)
{
int max1 , min1 , max2 , min2;
if(sizeof(s)/sizeof(int)==2) //判断数据个数 若数据个数是2个 那么就直接进行比较
{
if(*s>*(s+1))
{
*max=*s;
*min =*(s+1);
}else{
*max=*(s+1);
*min =*s;
}
}else{ //数据个数大于2个 将数据分为2组 进行递归调用
max_min(s , &max1, &min1); //数据组1
max_min(s+sizeof(s)/sizeof(int)/2 , &max2 , &min2); //数据组2
if(max1>max2)
{
*max=max1;
}else{
*max=max2;
}
if(min1>min2)
{
*min=min2;
}else
*min=min1;
}
}
}
相关文章推荐
- 分治法求数组的最大最小值
- 分治法求最大最小值
- 分治法找最大值最小值
- 分治法的经典问题——求数列中最大最小值
- 分治法求数组最大最小值
- c#数据结构之最大子数组问题(分治法)
- 分治法查找数组最大最小值
- 分治法求最大和最小值
- 求最大最小值(分治法)
- 分治法求最大最小值
- 分治法求最大值最小值
- 用分治法求最大最小值
- 算法系列——用分治法求最大最小值
- 分治法求最大最小值
- 数据结构 最大值减去最小值小于或等于num的子数组数量
- 【转】分治法求最大值最小值
- 分治法解决寻找数组中最大最小值的问题
- 线段树,数据结构,RMQ,分治法,最大和(Magician,HDU 5316)
- 采用分治法求最大子列
- 线段树,最大最小值