#include <iostream>
using namespace std;
int main()
{
const int N=10;
int left,right,middle,x;
int a[N]={2,5,6,8,9,12,24,32,38,40};
cout << "输入个要查找的数: ";
cin>>x;
for (left=0,right=N-1;left<=right;)
{
middle=(left+right)/2;
if (x==a[middle])
break;
else if (x<a[middle])
right=middle-1;
else
left=middle+1;
}
if (x==a[middle])
cout<<"a["<<middle<<"]="<<x<<endl;
else
cout<<"查找不到"<<x<<endl;
return 0;
}
==================================================================================================================================
以下内容来自网络
原理:类似于二分法解方程,二分查找首先比对序列中间的数是否是要找的数,如果不是,由于是有序数列,则看其在左侧区间还是右侧区间,舍弃不在的那一半区间,然后在剩余的区间重复刚才的办法,直到找到该数,由于每次舍弃一半的数据量,所以查找效率较高。
描述:设三个变量 left,right,middle分别为序列的两侧下标和中间下标,当判断出不在左侧区间,则 left=middle+1 ,从而利用右侧一半构造出一个新区间,否则 right=middle-1,利用左边一侧构造新区间,然后重复刚才过程,如此下去,要么找到数据,要么left>right,此时也应该停止查找,说明序列中没有该数。