| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3051 人关注过本帖, 1 人收藏
标题:二分法查找,进来帮帮我吧
只看楼主 加入收藏
木朵夕年
Rank: 1
等 级:新手上路
帖 子:25
专家分:8
注 册:2013-6-14
结帖率:100%
收藏(1)
已结贴  问题点数:20 回复次数:56 
二分法查找,进来帮帮我吧
a[10]={-3,-2,0,1,1,1,1,5,7,9}  这个数组内用二分法查找1的个数。
我写的x=1

      int search(int a[],int x)
{
   int left=0,right=n-1,mid,l=0;
   while(left<right)
   {
       mid=(left+right)/2;
       if(a[mid]==x)
       {
           l++;

       }
       else if(a[mid]>x)
           right=mid-1;
       else left=mid+1;
   }
  return l;
}



应该怎么写?本人新手,请用C语音写,谢谢
搜索更多相关主题的帖子: search return 二分法 语音 
2013-08-06 16:40
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
百度上一堆

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-06 17:29
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
百度上两堆(楼下注意队形)

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-06 17:48
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
百度上三堆(楼下注意队形)


PS:不要欺负妹纸啦。

你的那个n是什么东西?

还是贴完整代码吧,看起来方便一些。

学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 18:15
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
代码不全...

给你一段百度的伪代码
程序代码:
BinarySearch(max,min,des)
mid-<(max+min)/2
while(min<=max)
mid=(min+max)/2
if mid=des then
return mid
elseif mid >des then
max=mid-1
else
min=mid+1
return max


[ 本帖最后由 peach5460 于 2013-8-6 18:31 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-06 18:26
XiaoXiao_Ren
Rank: 3Rank: 3
来 自:西安
等 级:论坛游侠
威 望:1
帖 子:80
专家分:198
注 册:2013-7-17
收藏
得分:0 
回复 楼主 木朵夕年
mid=(left+right)/2;
       if(a[mid]==x)
  //这里当第一次a[mid]的值等于x的时候,你的left right mid 均没有再次变化,所以while一直死循环
       {
           l++;

       }

否极泰来
2013-08-06 18:29
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
以下是引用蚕头燕尾在2013-8-6 18:15:43的发言:

百度上三堆(楼下注意队形)


PS:不要欺负妹纸啦。

你的那个n是什么东西?

还是贴完整代码吧,看起来方便一些。


原来是妹纸啊,没注意不是我的错,嘎嘎

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-06 19:25
love云彩
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:青藏高原
等 级:贵宾
威 望:53
帖 子:3663
专家分:11416
注 册:2012-11-17
收藏
得分:0 
对于一些常见的算法,百度上多的是,为什么不自己先去总结?不分析就不知道自己哪一步不懂。你一来就是贴上代码,叫帮忙,又不说你哪里不懂,这样何时才能解决你的问题?

思考赐予新生,时间在于定义
2013-08-06 20:15
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,几位别光说便宜话了,实际动手写两行代码怎么样?

这样吧,以今天为限(午夜十二点前),写出在有序数组(精确点说:非降序)中用二分法查找指定数值的元素数量的代码。

写出来的人将分享我个人奖励的100专家分。

如果没人写出来明天我会写一段示例。

这里统一一下函数原型,请大家遵守这个接口约定:

int element_count(int * set, int len, int e)

其中set为有序数组头指针,len为数组长度,e为要查找的元素数值,返回值为数组set中值为e的元素的数量。

函数中可以认为set是排好序的,不必对它的有序性作判断和处理。

当然,要求必须使用二分法,至于是否用递归等其它方面不作要求。

重剑无锋,大巧不工
2013-08-06 21:06
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 9楼 beyondyf
先冒昧问一句,既然是已经排好序的(我理解的是升序),

还有必要输出目标值的个数吗?

虽然版主考虑的可能是有重复元素,但是感觉在二分法里加这么个东西没什么意思吧。


学习编程,为的是表达自己的思想,而不是被别人的思想所禁锢。要先明白自己想干嘛,而不要先问别人让你干嘛。               

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 21:31
快速回复:二分法查找,进来帮帮我吧
数据加载中...
 
   



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

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