简介
二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列
查找过程
编辑 播报
首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
算法要求
编辑 播报
1.必须采用顺序存储结构。
2.必须按关键字大小有序排列。
#include<bits/stdc++.h>
using namespace std;
int a[1000005],n,T,x;
int bins(int left,int right,int key){
if(left>right) return -1;
if(left == right){
if(a[left] == key)
return left;
else
return -1;
}
int mid = (left+right)/2;
if(key == a[mid]){
return bins(left,mid,key);
}else if(key<a[mid]){
return bins(left,mid-1,key);
}else{
return bins(mid+1,right,key);
}
}
int main()
{
cin>>n;
for(int i = 1 ; i<=n ; i++) cin>>a[i];
cin>>T;
while(T--){
cin>>x;
cout<<bins(1,n,x)<<" ";
}
return 0;
}