首页 > 解决方案 > 为什么这个 C++ 程序没有显示任何输出?

问题描述

我正在尝试为二进制搜索编写代码,但它没有显示任何输出。请告诉我我的错误。

#include <iostream>
using namespace std;

int main(){
    int a[]= {1, 3, 5 , 7,  32};
    int n;
    cin>>n;
    int last=(sizeof(a)/sizeof(a[0]))-1;
    int first=0;
    while(first<=last){
        int mid=(last-1)/2;

        if(a[mid]==n){
            cout<<"No. Found"<< endl;
        }
        if(n>a[mid])
        {
            first=mid+1;
        }
        else
        {
            last=mid-1;
        }
    }
    cout<<"Not Found"<<endl;
    return 0;
}

标签: c++

解决方案


你计算的方式mid不对,应该是这样的:

int mid = (first + last) / 2;

最好的方法是避免溢出(first + last可以溢出):

int mid = first + (last - first) / 2;

或使用>>运算符:

int mid = (first + last) >> 1;

推荐阅读