考题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);
}