【Java】陣列二分查詢元素

love_Aym發表於2018-03-30

查詢前提:陣列元素有序

要求:查詢元素對應的索引



程式碼實現:

public class Test_erfenfa {

	public static void main(String[] args) {
		int[] arr = {11,22,33,44,55,66,77};
		int i = getIndex(arr,33);
		System.out.println(i);
	}
	
	public static int getIndex(int[] arr, int value) {
		int min = 0;
		int max = arr.length - 1;
		int mid = (min + max) / 2;
		
		while(arr[mid] != value) {					//當中間值不等於要找的值,就開始迴圈查詢
			if(arr[mid] < value) {					//當中間值小於了要找的值
				min = mid + 1;					//最小的索引改變
			}else if (arr[mid] > value){			        //當中間值大於了要找的值
				max = mid - 1;					//最大的索引改變
			}
			
			mid = (min + max) / 2;					//無論最大還是最小改變,中間索引都會隨之改變
			
			if(min > max) {						//如果最小索引大於了最大索引,就沒有查詢的可能性了
				return -1;					//返回-1
			}
		}
		return mid;
	}

}

相關文章