这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字从小到大有序排列的。二分查找是一种递归过程,每折半查找一次,可使查找范围缩小一半,当查找范围缩小到只剩下一个元素,而仍不等于关键字,说明查找失败,在最坏的情况下,折半查找所需要的比较次数为O(nlog2n)..
#include <iostream> using namespace std; #define len 10 int source[]={6,12,28,37,54,65,69,83,90,92}; int search(int s[],int n,int key) { int left,right,mid; left=0; right=n-1; while(left<=right) //查找范围含含至少一个元素 { mid=(left+right)/2; if(s[mid]==key) return mid; else if(s[mid]>key) right=mid-1; else left=mid+1; } return -1; } int main() { int key,i,pos; cout<<"原数据表:"<<endl; for(i=0;i<len;i++) cout<<source[i]<<" "; cout<<endl; cout<<"请输入关键字:"; cin>>key; pos=search(source,len,key); if(pos>=0) cout<<"查找成功,该关键字位于数组的第"<<pos+1<<"个位置"<<endl; else cout<<"查找失败! "<<endl;; return 0; }