1. 程式人生 > >二分查詢(Java實現)

二分查詢(Java實現)

二分查詢又稱為折半查詢,要求線性表必須採用順序儲存結構,並且元素按關鍵字有序排列。
查詢過程:假設陣列中元素按升序排列,將陣列中間位置的值與待查值比較,如果相等則查詢成功;否則利用中間位置下標將陣列分成前後兩個子陣列,如果中間位置的值大於待查值則到前一子陣列中查詢,如果中間位置的值小於待查值則到後一子陣列中查詢。重複以上步驟,直到找到或查完陣列所有元素(未找到)。時間複雜度O(logN)。

Java程式碼如下:

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

二分查詢的遞迴實現

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