折半查找作为查找操作中时间复杂度很低的一种 (只有对数阶)
它的使用有前提条件:数列必须以升序或降序排列
首先定义1个数列:
typedef struct
{
int *val;
int length;
} SSTable;
初始化函数:
#define maxsize 16 //自行定义数列长度
void Create_S(SSTable &s)
{
s.val=new int[maxsize+1];
if(!s.val)
{
cout<<"创建失败"<<endl;
exit(1);
}
s.length=maxsize;
for(int i=1;i<=s.length;i++) //s.val[0]作为哨兵,方便后续操作
cin>>s.val[i];
}
查找主体部分
#include <iostream>
using namespace std;
int main()
{
SSTable s;
Create_S(s);
int low=1,high=s.length;
int mid=(low+high)/2;
while(low<=high)
{
if(key==s.val[mid]) return mid;
else if(key>s.val[mid])
{
low=mid+1;
mid=(low+high)/2;
}
else // key<s.val[mid]
{
high=mid-1;mid=(low+high)/2;
}
}
cout<<"can not find"<<endl;
return 0;
}