#折半查找:
int BinSearch(RecType R[],int n,KeyType k)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(k==R[mid].key)
cout<<mid+1<<endl;
if(k<R[mid].key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
#分块查找:
typedef struct
{
KeyType key;
int link;
}IdxType;
int IdxSearch(IdxType I[],int b,RecType R[],int n,KeyType k)
{ int s=n/b;
int low=0,high=b-1,mid,i;
while(low<=high)
{
mid=(low+high)/2;
if(I[mid].key>=k)
high=mid-1;
else
low=mid+1;
}
i=I[high+1].link;
while(i<=I[high+1].link+s-1 && R[i].key!=k)
i++;
if(i<=I[high+1].link+s-1)
cout<<"关键字的逻辑序号为:"<<i+1<<endl;
else
cout<<"该值不存在,查找结束!"<<endl;
return 0;
}
#折半
#include <iostream>
using namespace std;
typedef int KeyType;
typedef struct{
KeyType key;
}RecType;
int BinSearch(RecType R[],int n,KeyType k)
{
int low=0,high=n-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(k==R[mid].key)
cout<<mid+1<<endl;
if(k<R[mid].key)
high=mid-1;
else
low=mid+1;
}
return 0;
}
int main()
{
RecType R[10]={1,2,3,4,5,6,7,8,9,10};
KeyType key;
cout<<"请输入想要查找的值:"<<endl;
cin>>key;
BinSearch(R,10,key);
return 0;
}
#分块
#include <iostream>
using namespace std;
typedef int KeyType;
typedef struct
{
KeyType key;
}RecType;
typedef struct
{
KeyType key;
int link;
}IdxType;
int IdxSearch(IdxType I[],int b,RecType R[],int n,KeyType k)
{
int s=n/b;
int low=0,high=b-1,mid,i;
while(low<=high)
{
mid=(low+high)/2;
if(I[mid].key>=k)
high=mid-1;
else
low=mid+1;
}
i=I[high+1].link;
while(i<=I[high+1].link+s-1 && R[i].key!=k)
i++;
if(i<=I[high+1].link+s-1)
cout<<"关键字的逻辑序号为:"<<i+1<<endl;
else
cout<<"该值不存在,查找结束!"<<endl;
return 0;
}
int main()
{
RecType R[25]={8,14,6,9,10,22,34,18,19,31,40,38,54,66,46,71,78,68,80,85,100,94,88,96,87};
IdxType I[5]={14,34,66,85,100};
KeyType k;
cout<<"请输入想要查找的关键字:"<<endl;
cin>>k;
I[0].key=14;
I[1].key=34;
I[2].key=66;
I[3].key=85;
I[4].key=100;
I[0].link=0;
I[1].link=4;
I[2].link=10;
I[3].link=15;
I[4].link=20;
IdxSearch(I,5,R,25,k);
return 0;
}