1. 程式人生 > >JAVA之二分查詢

JAVA之二分查詢

陣列中查詢元素的方式有兩種:1、基本查詢:適用於陣列元素無序

                                                      2、二分查詢(折半查詢):適用於陣列元素有序

思想:1、定義最小索引值,最大索引值並計算出中間索引值。

           2、判斷中間索引值是否等於需要查詢的值:A、等於 B、不等於

           3、當A情況時,返回該索引值

           4、當B情況時,判斷中間索引值與需要查詢的值的關係 A、大於 B、小於

           5、當A情況時,最小索引值不變,最大索引值等於中間索引值減1,然後再回到第2條。

           6、當B情況時,最大索引值不變,最小索引值等於中間索引值加1,然後再回到第2條。

    

	public static void main(String[] args) {
		int[] a = { 1, 3, 5, 12, 24, 34, 56, 78, 79, 89 };
		int vaule = 79;
		System.out.println(GetIndex(a, vaule));
	}

	static int GetIndex(int[] a, int vaule) {
		int min = 0;//定義最小索引
		int max = a.length;//定義最大索引
		int mid = (min + max) / 2;//計算中間索引
		while (a[mid] != vaule) {
			if (a[mid] > vaule) {//中間索引對應的值大於需要查詢的值
				max = mid - 1;
				mid = (max + min) / 2;
			} else if (a[mid] < vaule) {//中間索引對應的值小於需要查詢的值
				min = mid + 1;
				mid = (max + min) / 2;
			}
			if (min > max) { //判斷是否存在該值
				return -1;
			}
		}
		return mid;
	}

注意:當所陣列中不存在需要查詢的值時應該怎麼判斷?

當不存在該值時,最小索引min的值無限加1,最大索引max的值無限減1。則當min>max時即說明不存在該值。