1. 程式人生 > 其它 >Java 二分查詢 猜數字

Java 二分查詢 猜數字

技術標籤:二分查詢java演算法

Java 二分查詢

二分查詢
需求:猜數字,猜0-20之間的所有數字,包括0 和20,猜對後返回其索引位置,並打印出來索引位置的值,使用鍵盤輸入要猜的數字
方法:使用二分查詢
思路:

  • 1、把猜數字的範圍做成陣列(有序的)
  • 2、定義陣列中的起始索引位置low和陣列結尾索引位置hight
  • 3、每次猜不到都檢查陣列中間的索引位置
  • 4、如果猜的數字小了,就修改相應的low值
  • 5、如果猜的數字大了,就修改相應的hight值
  • 6、猜對了就返回相應的值和數字的位置的索引值

    注意:使用二分查詢的時候,陣列必須是有序的!

    public static void main(String[
] args) { //把猜數字的範圍做成陣列 //宣告一個一維的有序陣列 int[] array = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; System.out.println("================================================="); //需要查詢的元素 Scanner sc=new Scanner(System.in); System.out.println(
"請輸入你要查詢的數字:"); int item = sc.nextInt(); //進行二分查詢,並返回相應的結果 int index = binary_search(array, item); //根據二分查詢的結果打印出相應的內容 printResult(array, index, item); //需要查詢的元素 int item1 = -1; //進行二分查詢,並返回相應的結果 int index1 = binary_search(array, item1)
; //根據二分查詢的結果打印出相應的內容 printResult(array, index1, item1); System.out.println("================================================="); } /** * 用二分查詢判斷一個數是否存在一個數組裡 * * @param array 陣列 * @param item 需要判斷陣列中是否存在的一個指定元素 * @return */ public static int binary_search(int[] array, int item) { //需要查詢的最小範圍 - 陣列索引從0開始 int low = 0; // 需要查詢的最大範圍 - 陣列長度-1 int high = array.length - 1; while (low <= high) { // 只要範圍沒有縮小到只包含一個元素,就繼續查詢 // 整數除法,如果(low + high)不是偶數,Java自動將mid向下取整 int mid = (low + high) / 2; //如 (0+3)/2 = 1(1.5向下取整) int guess = array[mid]; //檢查中間的索引 if (guess== item) { // 如果找到了這個元素,則返回這個元素的索引即位置 return mid; } else if (guess> item) { // 猜的數字大了 high = mid - 1; } else {// 猜的數字小了 low = mid + 1; } } return -1; // 返回-1表示沒有指定的元素 } /** * 根據二分查詢的結果打印出相應的內容 * * @param array 用於查詢的陣列 * @param index 二分查詢返回的索引 * @param item 查詢的元素 */ public static void printResult(int[] array, int index, int item) { if (index == -1) { System.out.println("很抱歉,陣列 " + Arrays.toString(array) + " 中沒有 " + item + " 這個元素"); } else { System.out.println("陣列 " + Arrays.toString(array) + " 中存在 " + item + " 這個元素,它的索引為:" + index); } }

查詢正確的結果是:
在這裡插入圖片描述
查詢錯誤的結果是:
在這裡插入圖片描述
注意:使用二分查詢的陣列必須是有序的陣列