【C++】二分法搜索实现

二分法搜索实现 C++

主要思路:

  在[有序]序列中寻找某个给定值得位置,从中间位置开始搜索,如果中间位置正好是给定值,搜索完成;

  如果不是,若中间位置的值大于给定值,则在前半段序列进行搜索;

  若中间位置的值小于给定值,则在后半段序列进行搜索。  

伪代码:

 1  // 中间位置计算方法 若text长度为偶数,length/2 + begin 为中间两位的右侧; // 若text长度为奇数,length/2 + begin 为正中央位置。
 2 
 3  // 注意: text.end 是尾元素的下一个位置  称为 [尾后迭代器]
 4 
 5  mid = text.begin + text.length/2;
 6 
 7  // 按照算法思路进行搜索
 8 
 9  while(text.mid!=text.end&&!*text.mid!=value){
10 
11   if(value < text.mid)
12 
13    end = mid;
14 
15   else
16 
17    begin = mid + 1;
18 
19   // 重新确定中间位置
20 
21   mid = text.begin + text.length/2;
22 
23  }
24 
25  
C++ 示例:
 1 #include <iostream>
 2 #include <string>
 3 using namespace std;
 4 int main(){
 5     string text_search("abcdefghijkmnopqrstuvwxyz");
 6     char value_search = 'm';
 7     auto begin = text_search.begin(), end = text_search.end();
 8     auto mid = begin + (end-begin)/2;
 9     while (mid != end && (*mid)!=value_search)
10     {
11         if(value_search < *mid)
12             end = mid;
13         else
14         {
15             begin = mid + 1;
16         }
17         mid = begin + (end - begin)/2;
18     }
19     // 若到元素后
20     if ((*mid) == value_search){
21         cout << value_search << " at " << (int)(mid-text_search.begin()) << " of " << text_search <<endl;
22     }
23 
24     return 0;
25 }

猜你喜欢

转载自www.cnblogs.com/bicyclelg/p/11732557.html