二分查找Binary Search

来源:互联网 发布:2014年网络歌曲 编辑:程序博客网 时间:2024/04/28 23:24

在一个有序的集合中查找元素,可以使用二分查找算法,也叫二分搜索。二分查找算法先比较位于集合中间位置的元素与键的大小,有三种情况(假设集合是从小到大排列的):
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;}
0 0
原创粉丝点击