二分查找的感悟

    今天在看v_JULY_v寫的二分查找實現(Jon Bentley:90%程序員沒法正確實現)一文,感悟頗深,在看文章以前本身心想二分查找不是至關的easy,可是真的在讀完文章,而後和本身寫的比較以後,發現我就是那90%中的一員,深深明白一個道理,看似再簡單的問題,沒有100%的細心和努力也不可能作好。如今就把原文中的代碼展現出來,不知道是屬於10%行列仍是90%行列?程序員

代碼來自:http://blog.csdn.net/v_july_v/article/details/7093204數組

  1. //二分查找V0.1實現版   
  2. //copyright@2011 July   
  3. //隨時歡迎讀者找bug,email:zhoulei0907@yahoo.cn。  
  4.   
  5. //首先要把握下面幾個要點:   
  6. //right=n-1 => while(left <= right) => right=middle-1;  
  7. //right=n   => while(left <  right) => right=middle;  
  8. //middle的計算不能寫在while循環外,不然沒法獲得更新。   
  9.   
  10. int binary_search(int array[],int n,int value)  
  11. {  
  12.     int left=0;  
  13.     int right=n-1;  
  14.     //若是這裏是int right = n 的話,那麼下面有兩處地方須要修改,以保證一一對應:  
  15.     //一、下面循環的條件則是while(left < right)  
  16.     //二、循環內當array[middle]>value 的時候,right = mid  
  17.   
  18.     while (left<=right)          //循環條件,適時而變  
  19.     {  
  20.         int middle=left + ((right-left)>>1);  //防止溢出,移位也更高效。同時,每次循環都須要更新。  
  21.   
  22.         if (array[middle]>value)  
  23.         {  
  24.             right =middle-1;   //right賦值,適時而變  
  25.         }   
  26.         else if(array[middle]<value)  
  27.         {  
  28.             left=middle+1;  
  29.         }  
  30.         else  
  31.             return middle;    
  32.         //可能會有讀者認爲剛開始時就要判斷相等,但畢竟數組中不相等的狀況更多  
  33.         //若是每次循環都判斷一下是否相等,將耗費時間  
  34.     }  
  35.     return -1;  
  36. }  
相關文章
相關標籤/搜索