二分查找算法(递归与非递归两种方式)
首先說說二分查找法。
二分查找法是對一組有序的數字中進行查找,傳遞相應的數據,進行比較查找到與原數據相同的數據,查找到了返回1,失敗返回對應的數組下標。
采用非遞歸方式完成二分查找法。java代碼如下所示。
[java]?view plain?copy?print?
????/*?
?????*?非遞歸二分查找算法?
?????*?參數:整型數組,需要比較的數.?
?????*/??
????public?static?int?binarySearch(Integer[]srcArray,int?des){??
????????//第一個位置.??
????????int?low=0;??
????????//最高位置.數組長度-1,因為下標是從0開始的.??
????????int?high=srcArray.length-1;??
????????//當low"指針"和high不重復的時候.??
????????while(low<=high){??
????????????//中間位置計算,low+?最高位置減去最低位置,右移一位,相當于除2.也可以用(high+low)/2??
????????????int?middle=low+((high-low)>>1);??
????????//與最中間的數字進行判斷,是否相等,相等的話就返回對應的數組下標.??
????????if(des==srcArray[middle]){??
????????????return?middle;??
????????//如果小于的話則移動最高層的"指針"??
????????}else?if(des<srcArray[middle]){??
????????????high=middle-1;??
????????//移動最低的"指針"???
????????}else{??
????????????low=middle+1;??
????????????}??
????????}??
????????return-1;??
????????}??
??????
}??
采用遞歸方式完成二分查找算法。代碼如下所示。
[java]?view plain?copy?print?
/**?
?*?遞歸方法實現二分查找法.?
?*?@param?Array數組?
?*?@param?low?數組第一位置?
?*?@param?high?最高?
?*?@param?key?要查找的值.?
?*?@return?返回值.?
?*/??
int?BinSearch(int?Array[],int?low,int?high,int?key)??
{??
????if?(low<=high)??
????{??
????????int?mid?=?(low+high)/2;??
????????if(key?==?Array[mid])??
????????????return?mid;??
????????else?if(key<Array[mid])??
????????????//移動low和high??
????????????return?BinSearch(Array,low,mid-1,key);??
????????else?if(key>Array[mid])??
????????????return?BinSearch(Array,mid+1,high,key);??
????}??
????else??
????????return?-1;??
}??
遞歸思想會被經常用到,更加突出了編程解決問題的高效。
轉載于:https://blog.51cto.com/8023java/1826305
總結
以上是生活随笔為你收集整理的二分查找算法(递归与非递归两种方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下调试core的命令
- 下一篇: unity, eulerAngle