题目
:计算二分查找的次数,约定二分的中点mid = (left + right) / 2。
输入描述
第一行输入一个整数N(N<=10000)。
第二行输入N个升序整数。
第三行输入一个待查找的整数(必定在第二行中出现过)。
输出描述
输出二分查找该整数时,进行过多少次二分。
输入样例:
5
18 53 54 74 99
53
输出样例:
2
题解
:本题采用二分查找,每进行一次二分cnt++即可。
代码(C++)
:
#include <bits/stdc++.h>
using namespace std;
int main(){
int n, cnt = 0, find; // 数据总个数,查找次数,查找元素
int data[10000]; // 存储输入数据
int left, right, mid;
// 输入
scanf("%d",&n);
for(int i = 0; i < n; i++){
scanf("%d",&data[i]);
}
scanf("%d",&find);
left = 0;
right = n-1;
// 主体
while(left <= right){
mid = (right + left) / 2;
if(data[mid] > find){
right = mid - 1;
cnt++;
}else if(data[mid] < find){
left = mid + 1;
cnt++;
}else{
break;
}
}
// 输出
printf("%d",cnt);
return 0;
}
写在后面
这个专栏主要是我在刷题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!