顺序查找的优点是算法简单,表中对有序性无要求,但是查找效率比较低。
折半查找跟普通的顺序查找的区别是:折半查找要求表中的元素是有序的,并且是采用顺序存储的,不能是链式存储的。
折半查找的主要思路是:在有序的表中,取得表中的中间记录进行比较。如果给定查找的值和中间记录相等,就表示查找成功;如果给定查找的值小于中间记录,则在中间记录的左边继续查找;如果给定查找的值大于中间记录,则在中间记录的右边继续查找;不断重复这个过程,直至查找成功或者查不到给定查找的值,如下图所示。
设有序表为数组matrix,其长度为n,需要查找的值为k,其算法可以描述为:
int mid_search(int matrix[],int n,int k)
{
int low=1,high=n,mid;
while(low<=high)
{
mid=(low+high)/2;
if(k<matrix[mid])
high=mid-1 ;
else if(k>matrix[mid])
low=mid+1;
else
return mid;
}
return 0;
}