JAVA之二分查詢
阿新 • • 發佈:2018-11-08
陣列中查詢元素的方式有兩種: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時即說明不存在該值。