C++ STL 中的二分查找函数

c++server side programmingprogramming

二分查找是一种在排序数组中找到目标值位置的搜索算法。二分查找将目标值与排序数组的中间元素进行比较。二分查找的时间复杂度为 O(1)。这是一个 C++ 程序,我们在其中实现了各种。C++ STL 中的二分查找函数

算法

开始
   初始化整数值向量。
   这里使用的函数:
   binary_search(start_pointer, end_pointer, value) = 如果值存在于数组中,则返回 true,否则返回 false。

   lower_bound(start_pointer, end_pointer, value) = 如果容器
      包含 1 个值,则返回指向"值的位置"的指针。如果容器
      包含多个值,则返回指向"值的第一个位置"的指针。如果容器
      不包含值的出现,则返回指向"下一个比值更大的数字的位置"的指针。

   upper_bound(start_pointer, end_pointer, value) = 如果容器
      包含 1 个值,则返回指向"下一个比值更大的值的位置"的指针。返回指向"下一个比值最后一次出现的更高的数字的第一个位置"的指针如果容器包含多个值。如果容器不包含值的出现,则返回
      指向"下一个比值更大的数字的位置"的指针。
   打印结果。
结束。

示例代码

#include<bits/stdc++.h>
using namespace std;
int main() {
   vector<int> a = {6,7,10,14,16,20};
   if (binary_search(a.begin(), a.end(), 50))
      cout << "50 exists in vector";
   else
      cout << "50 does not exist";
   cout << endl;
   if (binary_search(a.begin(), a.end(), 7))
      cout << "7 exists in the vector";
   else
      cout << "7 does not exist";
   cout << endl;
   cout << "The position of 7 using lower_bound ";
   cout << lower_bound(a.begin(), a.end(), 7) - a.begin();
   cout << endl;
   cout << "The position of 7 using upper_bound ";
   cout << upper_bound(a.begin(), a.end(), 7) - a.begin();
   cout << endl;
}

输出

50 does not exist
7 exists in the vector
The position of 7 using lower_bound 1
The position of 7 using upper_bound 2

相关文章