#include <iostream>
using namespace std;
int BiSearch(int* num,int len,int key){
if(!num || len<=0) return -1;
int start=0,end=len-1;
int mid;
while(start<=end){
//折半查找|二分查找
//mid=start+(end-start)/2;
//插值查找,将key值在表中的位置反映到mid中
//插值查找适用于关键字分布均匀的查找表
mid=start+(end-start)*(key-num[start])/(num[end]-num[start]);
if(num[mid]==key)
return mid;
else if(num[mid]<key)
start=mid+1;
else
end=mid-1;
}
return -1;
}
int main(){
int num[]={1,2,3,4,5,6,7,8,9};
cout<<BiSearch(num,sizeof(num)/sizeof(*num),7);
}