在一个有序的集合中查找元素,可以使用二分查找算法,也叫二分搜索。二分查找算法先比较位于集合中间位置的元素与键的大小,有三种情况(假设集合是从小到大排列的):
1、键小于中间位置的元素,则匹配元素必在左边(如果有的话),于是对左边的区域应用二分搜索。
2、键等于中间位置的元素,所以元素找到。
3、键大于中间位置的元素,则匹配元素必在右边(如果有的话),于是对右边的区域应用二分搜索。
另外,当集合为空,则代表找不到。
非递归版:
输入:排序数组array,数组大小size,查找值key
返回:返回数组中的相应位置,否则返回-1
int binarysearch(int[] array,int size,int key){
if(array==NULL||size==0){
return -1;
}
int low=0, high=size-1;
int mid=0;
while(low<=high){
mid=(low+high)/2;
if(array[mid]>key){
high=mid-1;
}
else if(array[mid]<key){
low=mid+1;
}
else
return mid;
}
return -1;
}
递归版:
int binarysearch(int* array,int key,int low,int high){
if(low>high)
return -1;
int mid=(low+high)/2;
if(array[mid]<key)
binarysearch(array,key,mid+1,high);
else if(array[mid]>key)
binarysearch(array,key,low,mid+1);
else
return mid;
}