有序陣列的二分查詢
阿新 • • 發佈:2021-01-19
給定一個有序整型陣列, 實現二分查詢
實現思路:
找出位於陣列中間的值,並存放在一個變數中,變數暫時命名為mid,需要找到的toSearch和mid進行比較,如果toSearch值大於mid,則把陣列中間位置作為下一次計算的起點,重複前面兩步,如果toSearch值小於mid,則把陣列中間位置作為下一次計算的終點,重複前面三步,如果toSearch值等於mid,則返回陣列下標,完成查詢。
程式碼實現
package com.company;
public class Main {
public static void main(String[] args) {
int[] arr = {1, 3, 5, 7, 9, 10};
//建立一個binarySearch的方法,引數分別是要查詢的陣列和要查詢的元素
int pos = binarySearch(arr, 3);
System.out.println("你要查詢的陣列下標是:"+pos);
}
public static int binarySearch(int[] arr, int toSearch) {
int left = 0;
int right = arr. length - 1;
while (left <= right) {
//首先找到中間元素mid
int mid = (left + right) / 2;
if (toSearch < arr[mid]) {
//排除中間元素右側的值,right值變為中間元素-1
right = mid - 1;
}
else if (toSearch > arr[mid]) {
//排除中間元素左側的值,left值變為中間元素+1
left = mid + 1;
}
else {
return mid;
}
}
return -1;
}
}
演算法概念:二分查詢演算法也稱為折半搜尋、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法,這種演算法是建立在有序陣列基礎上的;演算法思想,搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束,如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較,如果在某一步驟陣列為空,則代表找不到,這種搜尋演算法每一次比較都使搜尋範圍縮小一半。