问题描述:
大家一定都能熟练掌握二分查找啦!那么来计算二分的次数吧!约定二分的中点mid = (left + right) / 2。输入:
第一行输入一个整数N(N<=10000)。第二行输入N个升序整数。第三行输入一个待查找的整数(必定在第二行中出现过)。
输出:
输出二分查找该整数时,进行过多少次二分。输入样例:
输入1:5
18 53 54 74 99
53
输出1:2
输入2:7
0 1 2 3 4 5 6
5
输出2:1
注:查找到元素不计入次数
#include<iostream>
using namespace std;
const int maxn = 10010;
int main() {
int n, a[maxn] = {},x;
cin >> n;
for (int i = 0; i < n; i++)
cin >> a[i];
cin >> x;
int left = 0, right = n - 1;
int ans = 0;
while (left <= right) { //是<=而不是<
int mid = (left + right) / 2;
if (a[mid] == x) {
break;
}
else if (a[mid] > x) {
right = mid - 1;
ans++;
}
else {
left = mid + 1;
ans++;
}
}
cout << ans;
system("pause");
return 0;
}