您的位置:首页 > 其它

求数组中最大值和最小值 以及 求数组中最大值和次大值 最小比较次数

2012-06-20 17:28 288 查看
#include<stdio.h>
int count1=0;
int count2=0;
void find_max_min(int* a,int n,int* max,int* min);//1.5n-2 compare
void find_max1_max2(int* a,int n,int* max1,int* max2);//n+logn+1 compare
int main()
{
int a[8]={4,2,3,1,5,4,6,8};
int max1,max2,min;
find_max_min(a,8,&max1,&min);
printf("max=%4d,min=%4d\n",max1,min);
printf("%2d\n",count1);
find_max1_max2(a,8,&max1,&max2);
printf("max1=%4d,max2=%4d\n",max1,max2);
printf("%2d\n",count2);
return 0;

}
void find_max_min(int* a,int n,int* max,int* min)//1.5n-2 compare
{
if(n<=0 || a==NULL)
return;
if(n==1)
{
*max=*min=a[0];
return;
}
if(n==2)
{
if(a[0]<a[1])
{
*max=a[1];
*min=a[0];
count1++;
}
else
{
*max=a[0];
*min=a[1];
count1++;
}
return;
}
else
{
int max1,max2,min1,min2;
find_max_min(a,n/2,&max1,&min1);
find_max_min(a+n/2,n-n/2,&max2,&min2);
if(max1<=max2)
{
count1++;
*max=max2;
}
else
{
*max=max1;
count1++;
}
if(min1<=min2)
{
*min=min1;
count1++;
}
else
{
*min=min2;
count1++;
}
return;
}
}

void find_max1_max2(int* a,int n,int* max1,int* max2)//n+logn compare
{
if(n<=0 || a==NULL)
return;
if(n==1)
{
*max1=*max2=a[0];
return;
}
if(n==2)
{
if(a[0]<a[1])
{
*max1=a[1];
*max2=a[0];
count2++;
}
else
{
*max1=a[0];
*max2=a[1];
count2++;
}
return;
}
else
{
int max1_temp1,max2_temp1;
int max1_temp2,max2_temp2;
find_max1_max2(a,n/2,&max1_temp1,&max2_temp1);
find_max1_max2(a+n/2,n-n/2,&max1_temp2,&max2_temp2);
if(max1_temp1<=max1_temp2)
{
*max1=max1_temp2;
count2++;
if(max1_temp1<=max2_temp1)
{
*max2=max2_temp1;
count2++;
}
else
{
*max2=max1_temp1;
count2++;
}
if(*max2<max2_temp2)
{
*max2=max2_temp2;
count2++;
}
}
else
{
*max1=max1_temp1;
count2++;
if(max1_temp2<=max2_temp1)
{
*max2=max2_temp1;
count2++;
}
else
{
*max2=max1_temp2;
count2++;
}
if(*max2<max2_temp2)
{
*max2=max2_temp2;
count2++;
}
}

return;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐