【演算法拾遺】二分查詢遞迴非遞迴實現

蘭亭風雨發表於2014-06-24

轉載請註明出處:http://blog.csdn.net/ns_code/article/details/33747953

    本篇博文沒太多要說的,二分查詢很簡單,也是常見常考的查詢演算法,以下是遞迴非遞迴的實現。

    非遞迴實現:

/*
非遞迴實現,返回對應的序號
*/
int BinarySearch(int *arr,int len,int key)
{
	if(arr==NULL || len<1)
		return -1;

	int low = 0;
	int high = len-1;
	while(low <= high)
	{
		int mid = (low+high)>>1;
		if(key == arr[mid])
			return mid;
		else if(key < arr[mid])
			high = mid-1;
		else
			low = mid+1;
	}
	return -1;
}
    遞迴實現:

/*
遞迴實現,返回對應的序號
*/
int BSearch(int *arr,int low,int high,int key)
{
	if(arr==NULL || low>high)
		return -1;
	
	int mid = (low+high)>>1;
	if(arr[mid] == key)
		return mid;
	else if(arr[mid] > key)
		return BSearch(arr,low,mid-1,key);
	else
		return BSearch(arr,mid+1,high,key);
}

/*
將遞迴實現的方法封裝起來
*/
int BinSearch(int *arr,int len,int key)
{
	return BSearch(arr,0,len-1,key);
}

相關文章