二分查找算法(遞歸與非遞歸兩種方式)

首先說說二分查找法。java

二分查找法是對一組有序的數字中進行查找,傳遞相應的數據,進行比較查找到與原數據相同的數據,查找到了返回1,失敗返回對應的數組下標。算法

 

採用非遞歸方式完成二分查找法。Java代碼以下所示。編程

 

[java]  view plain  copy
 
 print?在CODE上查看代碼片派生到個人代碼片
  1.     /* 
  2.      * 非遞歸二分查找算法 
  3.      * 參數:整型數組,須要比較的數. 
  4.      */  
  5.     public static int binarySearch(Integer[]srcArray,int des){  
  6.         //第一個位置.  
  7.         int low=0;  
  8.         //最高位置.數組長度-1,由於下標是從0開始的.  
  9.         int high=srcArray.length-1;  
  10.         //當low"指針"和high不重複的時候.  
  11.         while(low<=high){  
  12.             //中間位置計算,low+ 最高位置減去最低位置,右移一位,至關於除2.也能夠用(high+low)/2  
  13.             int middle=low+((high-low)>>1);  
  14.         //與最中間的數字進行判斷,是否相等,相等的話就返回對應的數組下標.  
  15.         if(des==srcArray[middle]){  
  16.             return middle;  
  17.         //若是小於的話則移動最高層的"指針"  
  18.         }else if(des<srcArray[middle]){  
  19.             high=middle-1;  
  20.         //移動最低的"指針"   
  21.         }else{  
  22.             low=middle+1;  
  23.             }  
  24.         }  
  25.         return-1;  
  26.         }  
  27.       
  28. }  



 

採用遞歸方式完成二分查找算法。代碼以下所示。數組

 

 

[java]  view plain  copy
 
 print?在CODE上查看代碼片派生到個人代碼片
  1. /** 
  2.  * 遞歸方法實現二分查找法. 
  3.  * @param Array數組 
  4.  * @param low 數組第一位置 
  5.  * @param high 最高 
  6.  * @param key 要查找的值. 
  7.  * @return 返回值. 
  8.  */  
  9. int BinSearch(int Array[],int low,int high,int key)  
  10. {  
  11.     if (low<=high)  
  12.     {  
  13.         int mid = (low+high)/2;  
  14.         if(key == Array[mid])  
  15.             return mid;  
  16.         else if(key<Array[mid])  
  17.             //移動low和high  
  18.             return BinSearch(Array,low,mid-1,key);  
  19.         else if(key>Array[mid])  
  20.             return BinSearch(Array,mid+1,high,key);  
  21.     }  
  22.     else  
  23.         return -1;  
  24. }  


遞歸思想會被常常用到,更加突出了編程解決問題的高效。spa

 

摘自:http://blog.csdn.net/lovesummerforever/article/details/24588989.net

相關文章
相關標籤/搜索