首页 > 其他 > 详细

二分搜索

时间:2017-02-16 17:32:27      阅读:238      评论:0      收藏:0      [点我收藏+]

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

  

 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

二分搜索

原文:http://www.cnblogs.com/web1013/p/6406750.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!