Java 二分法查找數組中的某個元素的位置

search的前提通常是排序,也就是說在排好序的隊列中,查找才具備通常意義。java

代碼以下:code

public class BinarySearch { //搜索是在排好序的基礎上進行的
	public static void main(String[] args) {
		int[] arr = {1, 3, 5, 7, 9, 11};
		System.out.println(BinarySearch.search(arr, 2));
		System.out.println(BinarySearch.binarySearch(arr, 9));
	}
	
	public static int search(int[] arr, int num) {
		for (int i = 0; i < arr.length; i++) {
			if (arr[i] == num) {
				return i;
			}
		}
		return -1;
	}
	
	public static int binarySearch(int[] arr, int num) { //二分搜尋
		if (arr.length == 0) {
			return -1;
		}
		
		int startPos = 0;
		int endPos = arr.length - 1;
		int mid = (startPos + endPos) / 2;
		while (startPos <= endPos) {
			if (num == arr[mid]) {
				return mid;
			}
			if (num < arr[mid]) {
				endPos = mid - 1;
			}
			if (num > arr[mid]) {
				startPos = mid + 1;
			}
			mid = (startPos + endPos) / 2;
		}
		
		return -1;
	}
}
相關文章
相關標籤/搜索