源自 : http://blog.csdn.net/v_july_v/article/details/7093204
PS:據說,二分查找的思想公佈之後,16年之後,纔有人寫出沒有bug的二分查找程序。你信嗎?
(1)非遞歸寫法
int binary_search(int arr[],int n,int value)
{
int left = 0;
int right = n-1;
while(left<=right)
{
int mid = left +(right - left)/2; //mid = (left+right)/2可能造成溢出(當二者均很大的時候)
if(arr[mid] > value)
right = mid + 1;
else if(arr[mid] < value)
left = mid - 1;
else
return mid;
}
return -1;
}
(2)遞歸寫法。事實上只是將上述的算法形式上改寫一下而已。
int binary_search(int arr[],int left,int right,int value)
{
if(left<=right)
{
int mid = left +(right - left )/2;
if(value==arr[mid])
return mid;
else if(value<arr[mid])
return binary_search(arr,left,mid-1,value);
else
return binary_search(arr,mid+1,right,value);
}
else
return -1;
}