对列的查找主要分为顺序查找和二分查找,其中顺序查找分为从头查找和从尾查找,为了提高查找的效率便引入了监督元技术,以空间来换取时间提高查找的效率,但总的来说,二分查找具有更高的效率,下面主要来介绍二分查找的主要算法:
以一个队列a[n],队列里共有n个元素,以left,right分别代表查找的开始和结尾,算法函数体如下:
递归法:
int search(a[ ],int x,int left,int right)
{
int mid;
if(left>right) return -1;
mid=(left+right)/2;
if(x==a[mid]) return mid;
if(x<mid)
return search(a,x,left,mid-1);
return search(a,x,mid+1,right);
}
非递归法:
int search(int a[],int n,int x)
{
int left,right,mid;
left=0;right=n-1;
while(left<=right)
{
mid=(left+right)/2;
if(x==a[mid]) return mid;
if(x<a[mid]) right=mid-1;
else left=mid+1;
}
return -1;
}