| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3051 人关注过本帖, 1 人收藏
标题:二分法查找,进来帮帮我吧
只看楼主 加入收藏
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
还剩1小时22分。我挺希望把分送出去的。

重剑无锋,大巧不工
2013-08-06 22:36
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:10 
#include<stdio.h>
 int main()
 {
     int element_count(int * set, int len, int e);

     int set[10]={1,2,3,4,5,5,5,5,8,9};

     printf("%d\n",element_count(set,10,9));
 }
 int element_count(int * set, int len, int e)
 {
     int mid,low=0,high=len-1;
     int num=0;

     while (low<=high)
     {
         mid=(low+high)/2;

         //如果高低等值
         if(set[low]==set[high])
         {
             if(set[mid]==e)
                {return high-low+1;
             break;}
             else
             {return 0;break;}
         }

         //高低值不等
         if(set[mid]==e)
         {
             if(set[low]==e)
             {
                 num=num+(mid-low+1);
                 low=mid+1;
             }
             else if(set[high]==e)
             {
                 num=num+(high-mid+1);
                 high=mid-1;
             }
             else
             {
                 high--;
             }
         }
         else if(set[mid]>e)
         {
             high=mid-1;
         }
         else
         {
             low=mid+1;
         }

     }
     return num;
 }

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

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 23:11
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
额,版主咋歇着去了?

不知道这回的代码符合要求不?


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

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 23:12
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
#include<stdio.h>
int main()
{
    int element_count(int* set,int len,int e);

    int set[10]={3,3,3,3,3,3,3,3,3,3};

    printf("%d\n",element_count(set,10,3));
}
int element_count(int * set, int len, int e)
{
    int mid,low=0,high=len-1;
    int num=0;

    while (low<=high)
    {
        mid=(low+high)/2;

        //如果高低等值
        if(set[low]==set[high])
        {
            if(set[mid]==e)
                return high-low+1+num;
            else
                return 0+num;
        }

        //高低值不等
        if(set[mid]==e)
        {
            if(set[low]==e)
            {
                num=num+(mid-low+1);
                low=mid+1;
            }
            else if(set[high]==e)
            {
                num=num+(high-mid+1);
                high=mid-1;
            }
            else//两头都不是要找的数
            {
                low++;
                high--;
            }
        }
        else if(set[mid]>e)
        {
            high=mid-1;
        }
        else
        {
            low=mid+1;
        }

    }

    return num;
}

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

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 23:33
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
倒数第二个代码还是有问题的,最后发的这个自我感觉应该是没什么问题了

算是满足了没有用到其他的“查找”算法了。

现在时间:23:37

不知不觉写个东西竟然用了这么长时间。。。


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

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 23:35
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
如果说还要在“只能使用二分法”上找我的代码的毛病的话,

也就是那个high++ 和low--写的有点差强人意了。

实在是想不出什么好的办法了。

人笨了一点,在版主的题目要求下,这道题我也就能做到这种程度了。。。

发这贴的时候里0点还有20分钟,不打算继续看这道题了,

就这样吧。。

收获:充分认识到了二分法的强大。

自我评价:第一次发的代码在大数据下有明显的劣势,因为部分代码上我用到从头查看的那种查找方法,这样确实不地道,当时没有想大数据的情况。

相比之下,后面的这些代码就避免了这种查找办法,自我感觉在大数据情况下比之前的代码还是有优势的。


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

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 23:40
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
期待版主明天给出示例代码~


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

                                                                                                                    Black Cat      Hello Tomorrow~
2013-08-06 23:44
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:0 
错过了...呵呵...
二分很考人的...

PS:我写不出完全无错的二分...
去年做项目的表格查询时写过一个...后来维护了好几次BUG...

我说这话肯定会被版主BS的,呵呵
昨天我看错题目了,我以为是
a[10]={3,2,0,1,1,1,1,5,7,9}
所以当时我以为楼主根本不会二分,看到上面的楼说代码不全,所以我在下面楼顺手也回了一个代码不全...
然后百度了一段伪代码给他

[ 本帖最后由 peach5460 于 2013-8-7 08:10 编辑 ]

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-08-07 06:06
小小程序猿
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:1
帖 子:755
专家分:2785
注 册:2013-7-18
收藏
得分:0 
表示看得懂,写不出来

孤独与寂寞是催化一个人迅速成长的良药,没有之一
2013-08-07 07:55
蚕头燕尾
Rank: 10Rank: 10Rank: 10
来 自:Gryffindo
等 级:贵宾
威 望:12
帖 子:734
专家分:1546
注 册:2013-3-24
收藏
得分:0 
回复 28楼 peach5460
我到现在也没搞明白B版主说的“完全”使用二分法到底是什么意思?

初步理解的是不能使用其他的“查找”算法。

如果要理解成不能使用“其他算法”,感觉不可能。。。

一个“hello world”都是一种算法,要说不能用其他任何算法,反正,我感觉我是没法写代码了。


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

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



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

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