编程C,C ++,Java,PHP,Ruby,图灵,VB
计算机科学加拿大 
编程C,C ++,Java,PHP,Ruby,图灵,VB  

用户名:   Password: 
 登记登记   

 Wiki.Wiki.   博客博客   搜索搜索   图灵图灵   聊天室  成员成员 
 二进制搜索
指数 -> 编程,C ++ -> C ++教程
查看上一个主题 可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下一个主题
作者 信息
SaltPro15




邮政发布: 2011年1月13日2011年12:44 PM  帖子主题:二进制搜索

在C ++中实现二进制搜索

大家好!这是我在这里的第一篇文章,所以我以为我会展现一个简单的方法来实现 二进制搜索算法。由于它们通过在每次迭代期间将数组中的元素数减少,因此工作有许多实际应用程序(例如Google),使得它们非常高效。

在实现搜索之前,我们需要一个数组来搜索!我编写了一个快速函数来生成要搜索的1000000随机整数的向量。

C ++:

#包括<iostream>
#包括<algorithm>
#包括<vector>
使用 命名空间 std;

向量<int> make_rand_array() {
    Srand.(时间(0));
    vector <int> N;
    为了 ( 我= 0;一世< 1000000; I ++)
    {
        我= 兰特() % 10000 + 1;
        N.推回(i);
    }
    sort(N。开始()ñ。结尾());
    返回 N;
}


现在我们可以去搜索!我使用了一个函数,它采用一系列整数(我们生成的)和int e(被搜索的元素)作为参数。我们从阵列的下限搜索到上限,每次迭代都会减少数组。然后,我们检查阵列的中间数量。如果中间数字是我们搜索的号码,则搜索完成!否则,我们检查阵列的中间数量是否高于或低于我们搜索的号码,并相应地调整上部或下频带。

C ++:

空白搜索(向量<int> &ar, e)
{       
    lb=0,UB = AR。尺寸(),中;    //上限,下限,阵列的中间数       
    为了(;磅<ub;)
       {
           mid=(LB + UB.)/2;
           如果(AR. []== E.)
             {
                cout<< “找到元素。\ n";
                休息;
             }
           别的
               如果(AR. []>e)
               ub=mid-1;
           别的
               如果(AR. []<e)
               lb=mid+1;
       }
       如果(ub<lb)
           cout<<“未找到元素。\ n";

}


和主要函数,它创建了矢量AR并调用了使用1000000随机整数填充它的过程。

C ++:

main()
{
    vector <int> ar;
   ar = make_rand_array.();
    e;
   
    Printf.(“请输入要找到的元素\ n");
    scanf.(“%d”, &e);
    Search(AR. ,e);
    GETCHAR.();
    GETCHAR.();
    返回 0;
}


我希望本教程有助于您了解二进制搜索算法。随意建议任何提交本教程更清晰的添加方式!
赞助
赞助
赞助
赞助
托尼




邮政发布: 星期四2011年1月13日12:52 PM  帖子主题:RE:二进制搜索

应该强调的是,阵列中的数字在一个 分类 order.
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
SaltPro15




邮政发布: 星期四2011年1月13日12:53 PM  帖子主题:RE:二进制搜索

d'哦!>.<谢谢托尼,我相信你会制作编辑?我不认为我可以编辑它一旦发表评论
托尼




邮政发布: 2011年1月13日星期四1:21  帖子主题:RE:二进制搜索

该规则仅适用于图灵帮助论坛。如果是这样,请告诉我,你不能在这里做出编辑。
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
魔鬼




邮政发布: 星期四13日2011年1:26 PM  帖子主题:RE:二进制搜索

不是一个糟糕的教程,但有三件事我认为问题:

1)搜索应该返回某种价值,可能是一个布尔:True如果找到元素,否则为False。

2)您的if(){}在搜索中是一场灾难。这不是错的,它写的很差。将if的块{}与else-if的单行混合在一起看起来很可怕,很难读取。更糟糕的是,在下一行和缩进的“别的”中放置了“否则”的一部分使它看起来像前面的“else”只是别的,而不是别的东西。

3)您的评论混合上限,下限和中间的顺序。

代码将是编写的男士:

代码:

BOOL搜索( vector <int> &ar, int e)
{       
   int lb = 0; //下界
    int ub=ar.size(); // upper bound
   int mid; //中间条目
    for(;lb<ub;)
    {
        mid=(lb+ub)/2;
        if(ar[mid]==e)
        {
            return true;
        }
        else if ( ar[mid] > e )
        {
            ub=mid-1;
        }
        else if ( ar[mid] < e )
        {
            lb=mid+1;
        }
    }

    // Note:这里不需要支票;
   //如果我们掉出上面的循环,
   //我们知道它是1b> ub,
   //或lb == ub和ar [lb]!= e,所以
   //找不到条目。
    return false;
}
m




邮政发布: 2011年1月13日星期四:下午9:01  帖子主题:Re:Re:二进制搜索

更好的是,返回找到该值的索引或者如果找不到-1则。此外,为什么初始化循环之外的变量是初始化部分的?

C ++:

搜索 (向量<int> &ar, e)
{     
    为了( LB = 0, ub = ar.尺寸(), 中旬= (LB + UB.)/2;磅< ub; mid=(LB + UB.)/2) {
        如果( ar[] == E. )
             返回 中;
        别的 如果( ar[] > e )
            ub = mid - 1;
        别的 如果( ar[] < e )
            lb = mid + 1;
    }
    返回 -1;
}

托尼




邮政发布: 2011年1月13日星期四:下午9:21  帖子主题:RE:二进制搜索

也可以用“else”替换最后一个“else”。
最新来自compsci.ca/blog: Tony's 编程博客。 DWite - A. 编程竞赛.
SaltPro15




邮政发布: 星期五1月14日2011年1:54 PM  帖子主题:RE:二进制搜索

我不能做出编辑,良好的建议,我在大约10分钟内写了这一点,所以如果一个mod可以添加这些会很棒的建议 很高兴
赞助
赞助
赞助
赞助
从上一个显示帖子:   
   指数 -> 编程,C ++ -> C ++教程
查看上一个主题 告诉一个朋友可打印的版本下载主题利率主题订阅本主题私人信息刷新页面 查看下一个主题

11  [ 8 Posts ]
跳到:   


Style:  
搜索: