使用迭代器运算的经典算法 二分搜索
- 二分搜索是从有序序列中寻找某个给定的值
- 算法分析:从序列中间的位置开始搜寻,如果中间的正好是目标元素,则搜索完成; 若 < 目标元素,则在后半部分搜索,若 > 目标元素,则在前半部分搜索,重复此过程,直到找到或没有元素供搜索。
- 示例代码:
int main()
{
int i = 1;
vector<int> v(10, 2);
for (auto &n : v)
{
n = i;
i += 2;
}
auto beg = v.begin(), end = v.end();
auto mid = v.begin() + (end - beg)/2;
while (mid != end && *mid != 9)
{
if (8 < *mid)
{
end = mid;
}
else
{
beg = mid +1;
}
mid = beg + (end - beg)/2;
}
cout << *mid <<endl;
cout << mid - v.begin() + 1 << endl;
return 0;
}
*mid 即要找的元素 mid - v.begin() + 1 即目标元素的位置