二分查找(折半查找)条件:待查找表为顺序存储结构的有序表.
折半查找过程是以处以区间中间位置记录的关键字和给定值比较,若相等,则查找成功,若不等,则缩小范围,直至新的区间中间位置记录的关键字等于给定值或者查找区间的大小小于零时(表明查找不成功)为止.
算法实现:
<span style="font-size:18px;"><strong><strong>int binarysearch(int array[],int low,int high,int key)
{
while(low<=high)
{
int mid=(low+high)/2;
if(array[mid]>key)
high=mid-1;
else if(array[mid]<key)
low=mid+1;
else//find
return mid;
}
//not find
return-1;
}</strong></strong></span>
递归实现:
<strong><span style="font-size:18px;"><strong>int binary_search(int arr[],int low,int high,int key)
{
int mid=low+(high-low)/2;
if(low>high)
return-1;
else{
if(arr[mid]==key)
return mid;
elseif(arr[mid]>key)
return binary_search(arr,low,mid-1,key);
else
return binary_search(arr,mid+1,high,key);
}
}</strong></span></strong>
二分查找性能:
当有序表长度较大(n>50)时,可以认为ASL=log2(n+1) - 1