C语言描述算法

vistalong 2007-12-16 10:30:16
用分治的方法设计算法,在数组A[1,N]中同时寻找最大值和最小值(假设n为2的方幂)用C语言描述算法并分析时间复杂度
我的思路是这样先把数组平分成两端分别求这两端的最大值和最小值在进行比较 求大家帮助实现
...全文
170 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
vistalong 2007-12-17
  • 打赏
  • 举报
回复
非常感谢大家提供思路
pptor 2007-12-17
  • 打赏
  • 举报
回复
#include <stdio.h>
int MAX(int a,int b)
{
return a>b?a:b;
}
int MIN(int a,int b)
{
return a<b?a:b;
}
//search max from a[] between low and high
int MaxSearch(int *a,int low,int high)
{
if(low==high) return a[low];
int middle=(low+high)/2;
return MAX(MaxSearch(a,low,middle),MaxSearch(a,middle+1,high));
}
//search min from a[] between low and high
int MinSearch(int *a,int low,int high)
{
if(low==high) return a[low];
int middle=(low+high)/2;
return MIN(MinSearch(a,low,middle),MinSearch(a,middle+1,high));
}
//when b is true search max from a[] between low and high,
//when b is false search min from a[] between low and high
int MAXMIN(int *a,int low,int high,bool b)//b true max ,false min
{
if(b) return MaxSearch(a,low,high);
else return MinSearch(a,low,high);
}
int main()
{
int a[20]={20,1984,1865,1795,1645,1594,14852,13455,12364,1135,10941,914,800,736,665,541,436,395,214,196};
int b;
b=MAXMIN(a,0,19,true);
printf("MAX=%d\n",b);
b=MAXMIN(a,0,19,false);
printf("MIN=%d\n",b);
return 1;
}
qiannv 2007-12-16
  • 打赏
  • 举报
回复
才学,不会,路过.
WaterWalker 2007-12-16
  • 打赏
  • 举报
回复
minmax( A[1-N], int b, int e, int *min, int *max )
{
if ( e - b == 1 ){
*min = A[b] > A[e] ? A[e] : A[b]
*max = A[b] > A[e] ? A[b] : A[e]
return;
}

int min1, max1, min2, max2;
minmax(A, b, (b + e) / 2, &min1, &max1);
minmax(A, (b+e) / 2 + 1, e, &min2, &max2);

*min = minimal(min1, min2)
*max = maxest(max1, max2);

return;

}

T = O(n)

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧