1. 程式人生 > >【JAVA】二分法查詢指定元素的下標

【JAVA】二分法查詢指定元素的下標

如果,我們要在一個數組中查詢某個指定的元素,可以使用二分法,從而大大降低查詢效率,前提是所給定的陣列是已經排序的;
下面是一個小小的例子

public class BinarySearch{
	public static void main(String[],args){
		int[] intList = {1,2,3,4,5,6,7,8,9,10};
		int target = binarySearch(intList,8);//查詢元素8所在的下標;
		System.out.println("目標下標為:"+target);
	}

	public static int binarySearch(int[] list,int key){
		int low = 0;
		int high = list.length - 1;
		while(high>=low){
		int mid = (low+high)/2;
		if(mid<list[mid])
			high = mid - 1;
		else if(mid==list[mid])
			return mid;
		else
			low = mid + 1;
		}
		return -low;
	}
}

如果查詢到,方法會返回該值對應的下標,如果沒找到,方法會返回該目標值應該插入的下標的負值;
但是,這裡有一個問題,如果陣列有重複值,例如int[] intList = {1,2,3,4,5,6,7,8,8,8,9,10};
方法只會返回中間那個8所在的位置