顺序查找:
int search(int a[],int x)
{
int i;
int pos=-1;
for(i=0;i<10;++i)
if(a[i]==x)
{
pos=i+1;
break;
}
return pos;
}
折半查找:
int search(int a[],int n,int x)
{
int low,mid,high;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x==a[mid])
return mid+1;
else if(a[mid]>x)
high=mid-1;
else
low=mid+1;
}
return -1;
}
分块查找:
将n个无素“按块有序”划分为m块,每一块中的结点不必有序,但块与块之间必须“按块有序”。
1)先取各块中的最大关键字构成一个索引表。
2)查找分为两部分,先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中。
3)然后在已经确定的块中用顺序法进行查找。
分块的大小:不一定要将线性表分成大小相等的若干块。各块可放在不同的向量中,也可将第一块存在一个单链表中。
struct index
{
int key;
int start;
int end;
}
in[3];
int search(int key,int a[])
{
int i,j;
i=0;
while(i<3 && key>in[i].key)
i++;
if(i>=3)
return -1;
j=in[i].start;
while(j<=in[i].end && a[j]!=key)
j++;
if(j>in[i].end)
j=-1;
return j;
}