zoukankan      html  css  js  c++  java
  • 二分搜索

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

      

     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

  • 相关阅读:
    【转载】python_logging模块
    python安装模块速度慢的解决方法
    2020软件工程作业00
    2020软件工程个人作业——软件工程实践总结
    2020软件工程作业05
    2020软件工程作业04
    2020软件工程作业03
    2020软件工程作业02
    2020软件工程作业01
    列表、元组、集合和字典区别
  • 原文地址:https://www.cnblogs.com/web1013/p/6406750.html
Copyright © 2011-2022 走看看