1. 程式人生 > >java 實現二分查詢法

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, 3));
		System.out.println(binarySearch(src,3,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; 
		while(low <= high) { 
			int middle = (low + high)/2; 
			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 {  
		   return midIndex;  
	   }  
   } 

}

二分查詢又稱折半查詢,它是一種效率較高的查詢方法。

  【二分查詢要求】:1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。