| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 671 人关注过本帖
标题:关于二分查找法
只看楼主 加入收藏
Trista_沫
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-2-21
收藏
 问题点数:0 回复次数:10 
关于二分查找法
#include<stdio.h>
void main()
{
    int c[15];
    int i,n,low,high,mid,k=0;
    printf("Please enter 15 numbers(from big to small):\n");
    for(i=0;i<15;i++)
    {
        scanf("%d",&c[i]);
    }
    printf("Please enter a number:");
    scanf("%d",n);
    low=0;
    high=14;
    while(1)
    {
        mid=(low+high)/2;
        if(n==c[mid])
        {
            printf("di %d ge yuan su shi %d.\n",mid,n);
            break;
        }
        else if(n<c[mid])
        {
            low=mid+1;
        }
        else if(n>c[mid])
        {
            high=mid-1;
        }
        k++;
        if(k>4)
        {
            printf("No this number in it.\n");
            break;
        }
    }
}

求高手指点错在哪里了,输入完n之后就出现红叉叉报错了,为嘛捏???
搜索更多相关主题的帖子: void include numbers 
2013-02-21 14:25
青春无限
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江苏
等 级:贵宾
威 望:24
帖 子:3452
专家分:19340
注 册:2012-3-31
收藏
得分:0 
楼主你好!

应该是这样的scanf(“%d”,&n);你少了取地址符&

学 会看代码…学习写程序…学会搞开发…我的目标!呵呵是不是说大话啊!!一切皆可能
2013-02-21 15:59
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
收藏
得分:0 
else if里 高,低语句也用反了。

www.qunxingw.wang
2013-02-21 16:24
yuyilahanbao
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2013-2-16
收藏
得分:0 
      scanf("%d",n);改为
scanf("%d",&n);
另外我认为这种查找方法真的不错,单位认为可以优化一下,
就是if (k>4)可以改为 if(low>high)
同时这是找一个数在一个数组的位置,及判断是否有,如果改为查找一个数介于这个数组中的那两个数之间。即找一个数i
使得 a[i]<=n<=a[i+1]又该如何做呢?
2013-02-21 16:56
Trista_沫
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-2-21
收藏
得分:0 
回复 2楼 青春无限
感动T T我看了半天都没发现我少打了&,好眼力!
2013-02-21 17:45
Trista_沫
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-2-21
收藏
得分:0 
回复 3楼 qunxingw
小妹愚笨,什么意思没明白。。。怎么看语句高低?
收到的鲜花
  • qunxingw2013-02-21 20:38 送鲜花  49朵   附言:不好意思了,你的是对的,我很随意的看成了 ...
2013-02-21 17:46
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
高低语句就是你的 low和high的赋值语句啊 呵呵
如果你的表示升序的话 就是从小到大
那么 当c[mid]比n大的话 应该在左边区域找
这时候应该是high移动到mid前面
你弄反了

人生是一场错过 愿你别蹉跎
2013-02-21 20:02
rgb258
Rank: 2
等 级:论坛游民
帖 子:16
专家分:17
注 册:2013-2-21
收藏
得分:0 
初步看了下觉得 语句“scanf("%d",n);”应改为“ scanf("%d",&n);”吧。

我是菜鸟,大家多多指教,说错了不要说我哦,谢谢!
2013-02-21 21:13
Trista_沫
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2013-2-21
收藏
得分:0 
回复 7楼 fanpengpeng
多谢亲解释高低语句的意思~~~
不过我没有弄反哦。。。你仔细看看。。。真的没有弄反~(辩解辩解)
2013-02-21 22:37
fanpengpeng
Rank: 8Rank: 8
来 自:南极洲
等 级:蝙蝠侠
威 望:7
帖 子:299
专家分:849
注 册:2013-2-1
收藏
得分:0 
回复 9楼 Trista_沫
恩 对的 没有弄反 你的表示从大到小的
我刚才没有仔细看 我说的是 如果你的表示从小到大的话 那就反了
还有个就是 那两个语句不是就叫做高低语句 没这个名字 是随便起的名字 别被误导了

人生是一场错过 愿你别蹉跎
2013-02-21 23:09
快速回复:关于二分查找法
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020287 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved