二分查找

源自 : 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;
 }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章