例如给定一组单调递增的数
1 2 3 4 5 6 7 8 9 10
比如我想找9,常规思想是需要遍历整组数
而二分的思想是:
先将9与中间的数比较,9比中间数大,所以查找范围缩小到[中间数+1,末尾数]
按此方法逐步缩小范围,最终找到所需要找的数
代码如下
//基础二分
#include<iostream>
using namespace std;
int q[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int n = 10;
int search(int target)
{
int l = 0, r = n - 1;
while (l <= r)
{
int mid = (l + r) / 2;
if (target == q[mid]) return mid;
else if (target > q[mid])
l = mid + 1;
else if (target < q[mid])
r = mid - 1;
}
return -1;
}
int main()
{
int target;
cin >> target;
cout << search(target) << endl;
return 0;
}