技术面试手写代码考题--二分查找

来源:互联网 发布:淘宝外卖怎么找不到了 编辑:程序博客网 时间:2024/06/04 19:46

考题1:二分查找(递归与非递归):


  • 二分查找思想:
    1.数组从小到大排序;
    2.查找的key每次和中间数比较,如果key小于mid,查找mid左侧的数组部分;如果key大于mid,则查找mid右侧的数组部分;如果想等,则直接返回mid.

非递归

输入:排序数组-array,数组大小-asize,查找值-key
返回:返回数组中的相应位置,否则返回-1

int BinarySearch(int array[],int aSize,int key){    if(array == NULL||aSize == 0)        return -1;    int low = 0;    int high = aSize - 1;    int mid = 0;    while(low <= high){        mid = (low + high)/2;        if(array[mid] < key)            low = mid + 1;        else if(array[mid] > key)            high = mid - 1;        else            return mid;    }    return -1;}

递归

int BinarySearchRecursive(int array[],int low,int high,int key){    if(low > high)        return -1;    int mid = ( low + high )/2;    if(array[mid] == key)        return mid;    else if(array[mid] < key)        return BinarySearchRecursive(array,mid+1,high,key);    else        return BinarySearchRecursive(array,low,mid-1,key);}
原创粉丝点击