首先說說二分查找法。
二分查找法是對一組有序的數字中進行查找,傳遞相應的數據,進行比較查找到與原數據相同的數據,查找到了返回1,失敗返回對應的數組下標。
采用非遞歸方式完成二分查找法。Java代碼如下所示。
- /*
- * 非遞歸二分查找算法
- * 參數:整型數組,需要比較的數.
- */
- 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;
- }
- }
采用遞歸方式完成二分查找算法。代碼如下所示。
- /**
- * 遞歸方法實現二分查找法.
- * @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;
- }
遞歸思想會被經常用到,更加突出了編程解決問題的高效。
摘自:http://blog.csdn.net/lovesummerforever/article/details/24588989
