二分搜索

2018-06-17 23:19:53来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  二分搜索从有序序列中寻找某个给定的值。二分搜索从中间位置开始搜索,如果中间位置的元素正好就是要找的元素,搜索完成;如果不是,假如该元素小于要找的元素,则在序列的后半部分继续搜索;假如该元素大于要找的元素,则在序列的前半部分继续搜索。在缩小的范围内计算一个新的中间元素并重复之前的过程,直至最终找到目标或者没有元素可供继续搜索(即未找到要搜索的元素)。

  

 1     //text 必须是有序的
 2     //beg 和 end表示我们搜索的范围
 3     auto beg = text.begin(), end = text.end();
 4     auto mid = text.begin() + (end - beg) / 2;    //初始状态下的中间点
 5     
 6     //当还有元素尚未检查并且我们还没有找到 sought 时执行循环
 7     while (mid != end && *mid != sought)
 8     {
 9         if (sought < *mid)                ///我们要找的元素在前半部分吗?
10         {
11             end = mid;                    //如果是,调整搜索范围使得忽略掉后半部分
12         }
13         else                             //我们要找的元素在后半部分
14         {
15             beg = mid + 1;               //在 mid 之后寻找
16         }
17         mid = beg + (end - beg) / 2;      //新的中间点
18     }

  循环过程终止时,mid 或者等于 end 或者指向要找的元素。如果 mid 等于 end,说明 text 中没有我们要找的元素。

  摘自 C++Primer page100

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:bzoj3998 [ TJOI2015 ] --后缀自动机

下一篇:window下 ANSI Unicode utf8之间相互转换