首先确保待查找的元素是处于已排序状态,先给出一个错误的版本,下面这个程序将会陷入死循环:
#include <iostream> using namespace std; const int MAXN=100; int x[MAXN],n,t; //n是数组的长度,t是待查找的元素 int binarysearch(int t) { int l,u,m; l=0,u=n-1; while(l<=u) { m=(l+u)/2; if(x[m]<t)l=m; else if(x[m]>t)u=m; else return m; } return -1; } int main() { while(cin>>n>>t) { for(int i=0;i<n;i++)x[i]=10*i; cout<<binarysearch(t)<<endl; } return 0; }
input: 5 20 output: 2
5 30 3
5 40 ......问题出现在了这里;
好了,我们来看一个正确的版本吧:
#include <iostream> using namespace std; const int MAXN=100; int x[MAXN],n,t; //n是数组的长度,t是待查找的元素 int binarysearch(int t) { int l,u,m; l=0,u=n-1; while(l<=u) { m=(l+u)/2; if(x[m]<t)l=m+1; else if(x[m]>t)u=m-1; else return m; } return -1; } int main() { while(cin>>n>>t) { for(int i=0;i<n;i++)x[i]=10*i; cout<<binarysearch(t)<<endl; } return 0; }