有序数组的查找(个人感觉美到极致的一个算法)

来源:互联网 发布:大乐透算法必中5红 编辑:程序博客网 时间:2024/06/03 22:55

对于包含n个元素的数组,整个查找过程大约要经过logn次比较。(二分查找算法)
代码如下:
非递归版本

int BinarySearch(int array[],int n,int value){    int left = 0;    int right = n-1;    //如果上面这句是int right = n的话,则下面有两处需要改动    //while(left < right)    //array[middle]>value的时候 right = mid(基本没有这样写的)    while (left <= right)    {        int mid = left + ((right-left)>>1);//位运算更快        if (array[mid] > value)        {            right = mid-1;        }        else if (array[mid] < value)        {            left = mid+1;        }        else            return mid;//返回的是位置    }    return -1;}

递归版本

int BinarySearch(int array[],int left,int right,int value){        if (left > right)        {            return -1;        }        int mid = left + ((right-left)>>1);        if (array[mid] > value)        {            return BinarySearch(array,left,mid-1,value);        }        else if (array[mid] < value)        {            return BinarySearch(array,mid+1,right,value);        }        else            return mid;}
0 0
原创粉丝点击