(2014-1)二分查找的二分次数

问题描述:

大家一定都能熟练掌握二分查找啦!那么来计算二分的次数吧!约定二分的中点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

思路:

题中要求二分的次数,即就是把数组一分为二的次数,而不是循环次数。样例1中把数组分了两次之后mid值等于x,样例2数组分了一次就找到mid==x。因此在每一次更新左右边界时更新次数即可。

#include 
const int maxn = 10010;

int a[maxn];

int main(){
    int n, x;
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    scanf("%d", &x);
    int left = 0, right = n - 1;
    int mid, ans = 0;
    while(left <= right){
        mid = (left + right) / 2;
        if(a[mid] == x)
            break;
        else if(a[mid] > x){
            right = mid - 1;
            ans++;
        }
        else{
            left = mid + 1;
            ans++;
        }
    }
    printf("%d", ans);
    return 0;
}

 

你可能感兴趣的:(机试)