c++二分法

在比较大小的时候它是怎样比较大小的啊?intFIND(doubleF[],doublex,intn){intmid,bottom=0;inttop=n-1;while(b... 在比较大小的时候它是怎样比较大小的啊?
int FIND(double F[],double x,int n)
{
int mid,bottom=0;
int top=n-1;
while (bottom<=top)
{
mid=(bottom+top)/2; (这里的mid的值是为多少啊?是4.5嘛?)
if (fabs(F[mid]-x)<0.00001) (这里的F(mid)与x是怎样比较大小的啊?)
return 1;
else if(F[mid]<x)
bottom=mid+1;
else top=mid-1;
}
return 0;
}
void Find()
{
int i,j,k;
double f[10];
for(i=0;i<10;i++)
f[i]=15.9+i;(这里的f起到了什么作用啊?与上面声明的F有关嘛?)
j=FIND(f,17.9,10);
k=FIND(f,30.5,10);
printf("j=%d,k=%d\n",j,k);
}
展开
 我来答
silvergingko
2008-10-11 · TA获得超过5945个赞
知道小有建树答主
回答量:688
采纳率:0%
帮助的人:870万
展开全部
晕了,你自己连2分法的算法都看不懂啊?那学到快速排序,shell排序,堆排序,平衡二叉树,查找二叉树怎么办?2分法是算法里面相当容易的算法了,有点耐心自己多看几遍,算法这门学科一定要有耐心的。难的还在后面呢!!包括你看到像正则表达式匹配的算法,开始感觉象看天书一样的。有耐心,一点一点自然会明白的。
2分法,自己画个数轴,然后随便列写数字在数轴上,对照着2分算法手工试一下,很容易的。

1)这里的F(mid)与x是怎样比较大小的啊
这行的算法是问F[mid]这个数是不是等于x,等于的话,就不用再继续查找了,直接返回1,说明找到了。注意2个浮点数比较一定要用fabs(F[mid]-x)<0.00001,而不是象整数那样if (a == b)的表示方法。浮点数因为在计算机里是无法精确表示的,所以2个浮点数比较你一定要学会用if (fabs(F[mid]-x)<0.00001)的技巧。什么道理,你感兴趣的话,发消息给我,说来话长了。

2)这里的f起到了什么作用啊?与上面声明的F有关嘛?
这里是把f这个数组随便填满一些值,没有值,你让2分查找法在哪里查找?
就象你要在一本书里找自己的名字一样,你没有书,你怎么用2分法去找?
for(i=0;i<10;i++)
f[i]=15.9+i;所起的作用就是它给了你一本书,然后你可以调用FIND这个2分查找函数在书里查找你的名字。
baitdk
2008-10-11 · 超过27用户采纳过TA的回答
知道答主
回答量:87
采纳率:0%
帮助的人:75.9万
展开全部
int FIND(double F[],double x,int n)
{
int mid,bottom=0;
int top=n-1;
while (bottom<=top)
{
mid=(bottom+top)/2; /*因为bottom和top都是整型,所以用它们算出的结果也是整型,结果取整为:4 */
if (fabs(F[mid]-x)<0.00001) /*其实也里也可以写成:if(F[mid]-x==0.0) 我想这程序的意思是F[mid]与x它们之间的差值小于0.00001,即看作它们相等,如2.123456 与2.123458在这个程序看来,它们是相等的 */
return 1;
else if(F[mid]<x)
bottom=mid+1;
else top=mid-1;
}
return 0;
}
void Find()
{
int i,j,k;
double f[10];
for(i=0;i<10;i++)
f[i]=15.9+i;/*这里不明白吗?这是给f这个数组赋初值咧:f[0]=15.9,f[1]=16.9…… */
j=FIND(f,17.9,10);
k=FIND(f,30.5,10);
printf("j=%d,k=%d\n",j,k);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式