java 二分查找算法

/**
 * 二分查找又稱折半查找,它是一種效率較高的查找方法。 
  【二分查找要求】:1.必須採用順序存儲結構 2.必須按關鍵字大小有序排列。
 * @author Administrator
 *
 */
public class BinarySearch { 
    public static void main(String[] args) {
        int[] src = new int[] {1, 3, 5, 7, 8, 9}; 
        System.out.println(binarySearch(src, 7));
        System.out.println(binarySearch(src,7,0,src.length-1));
    }

    /**
     * * 二分查找算法 * *
     * 
     * @param srcArray
     *            有序數組 *
     * @param des
     *            查找元素 *
     * @return des的數組下標,沒找到返回-1
     */ 
   public static int binarySearch(int[] srcArray, int des){ 
    
        int low = 0; 
        int high = srcArray.length-1; 
//        System.out.println("high:"+high);
        while(low <= high) { 
            int middle = (low + high)/2; 
//            System.out.println("middle:"+middle);
            if(des == srcArray[middle]) { 
                return middle; 
            }else if(des <srcArray[middle]) { 
                high = middle - 1; 
            }else { 
                low = middle + 1; 
            }
        }
        return -1;
   }
      
      /**  
     *二分查找特定整數在整型數組中的位置(遞歸)  
     *@paramdataset  
     *@paramdata  
     *@parambeginIndex  
     *@paramendIndex  
     *@returnindex  
     */
    public static int binarySearch(int[] dataset,int data,int beginIndex,int endIndex){  
       int midIndex = (beginIndex+endIndex)/2;  
//       if(data <dataset[beginIndex]||data>dataset[endIndex]||beginIndex>endIndex){
//           return -1;  
//       }
       if(data <dataset[midIndex]){  
           return binarySearch(dataset,data,beginIndex,midIndex-1);  
       }else if(data>dataset[midIndex]){  
           return binarySearch(dataset,data,midIndex+1,endIndex);  
       }else if(data==dataset[midIndex]){  
           return midIndex;  
       } else{
           return -1;
       } 
   } 

}
相關文章
相關標籤/搜索