您的位置:首页 > 职场人生

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

2017-11-15 00:02 211 查看

考题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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: