1. 程式人生 > 其它 >有序陣列的二分查詢

有序陣列的二分查詢

技術標籤:java二分查詢

給定一個有序整型陣列, 實現二分查詢

實現思路
找出位於陣列中間的值,並存放在一個變數中,變數暫時命名為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; } }

演算法概念:二分查詢演算法也稱為折半搜尋、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法,這種演算法是建立在有序陣列基礎上的;演算法思想,搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束,如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較,如果在某一步驟陣列為空,則代表找不到,這種搜尋演算法每一次比較都使搜尋範圍縮小一半。