| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1476 人关注过本帖
标题:求棒助折半查找问题
只看楼主 加入收藏
tm00
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-10-29
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:8 
求棒助折半查找问题
有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。
输入10的时候,没有结果出来,程序停顿住了,输入其它数都得正常结果,为什么这样?哪位大神帮帮忙,找下问题出在哪?
代码如下:
  int main(){
      static int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
      int i,n,l,j=0;
      l=sizeof(a)/sizeof(a[0]);
      scanf("%d",&n);
      i=(l-1)/2;
      j=i;
      do{
         if(a[j]<n){
             i/=2;
             j=i+j+1;
         }
         if(a[j]>n){
             i=j;
             i/=2;
             j=i;
         }
         if(a[j]==n){
             printf("yes,%d\n",j);
             break;
         }
         if(i==0&&a[j]!=n)printf("no\n");
      }while(i>0);
      system("pause");
      return 0;
  }
搜索更多相关主题的帖子: 元素 
2016-12-16 10:53
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
二分法查找当查找集长度为奇数的时候总是会有那么一个数会出问题,不是死循环就是找不到~看来要分类讨论一下,主要是取整问题~

程序代码:
#include<stdio.h> 
#include<stdio.h> 
int main()//加了特殊情况考虑~
{
      static int a[15]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
      int i,n,l,j=0;
      l=sizeof(a)/sizeof(a[0]);
      scanf("%d",&n);
      i=(l-1)/2;
      j=i;
      do
      {
          if (a[(l-1)/2-1]==n)
          {
              printf("yes,%d\n",(l-1)/2-1);
              break;
          }
         if(a[j]<n)
         {
             i/=2;
             j=i+j+1;
         }


         if(a[j]>n)
         {
             i=j;
             i/=2;
             j=i-1;//
         }

         if (j==-1)
         {
             printf("no\n");
             break;
         }

         if(a[j]==n)
         {
             printf("yes,%d\n",j);
             break;
         }

         if(i==0&&a[j]!=n)
             printf("no\n");
      }while(i>0);

   

      return 0;

 
}


[此贴子已经被作者于2016-12-17 04:31编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-16 13:52
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
二分法我也不太懂,你最好还是看看这个贴吧~

编程论坛 - 这个用二分查找怎么做(已迷一个多小时了) http://bbs.bccn.net/thread-472441-1-1.html

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-16 14:01
tm00
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-10-29
收藏
得分:0 
回复 楼主 tm00
你改过后输入其他数据都没问题,但输入0就有问题了。
2016-12-16 19:33
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 4楼 tm00
有什么问题数据里面没有0,输出NO啊,再看看~要是不行,那就参考上面给出的网站,或者参考bsearch库函数是怎么写的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-16 19:57
tm00
Rank: 2
等 级:论坛游民
帖 子:25
专家分:20
注 册:2016-10-29
收藏
得分:0 
回复 5楼 九转星河
图片附件: 游客没有浏览图片的权限,请 登录注册

这是输入0的结果
2016-12-16 20:40
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:15 
回复 6楼 tm00
能力有限,只能加了个特殊情况考虑,真希望自己有空能做一个,不然一时也做不出来

已修复~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 04:32
bjut_Allen
Rank: 9Rank: 9Rank: 9
来 自:平乐园工业技术学校
等 级:蜘蛛侠
威 望:8
帖 子:323
专家分:1223
注 册:2016-10-16
收藏
得分:5 
二分法,供参考
#include <stdio.h>
#define NUM 15
int main()
{
    int a[NUM]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    int i,key,left=0,right=NUM-1,mid;
      mid=(left+right)/2;
    printf("Enter key:");
    scanf("%d",&key);
    while(left<right&&a[mid]!=key)
      {
          if(key<a[mid])
          right=mid-1;
          else if(key>a[mid])
          left=mid+1;
          mid=(left+right)/2;
       }
       if(key==a[mid])
       printf("%d",mid+1);
       else
       printf("NO find");
       return 0;
}

Code is my life.
2016-12-17 22:11
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 8楼 bjut_Allen
要好好学习下才行~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-17 22:14
快速回复:求棒助折半查找问题
数据加载中...
 
   



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

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