二分查詢法原始碼分析

2021-10-21 19:05:51 字數 1320 閱讀 9078

jdk api文件:

public

static

intbinarysearch

(int

a,int key)

使用二分搜尋法來搜尋指定的 int 型陣列,以獲得指定的值。必須在進行此呼叫之前對陣列進行排序(通過 sort(int) 方法)。如果沒有對陣列進行排序,則結果是不確定的。如果陣列包含多個帶有指定值的元素,則無法保證找到的是哪乙個。

引數:

a - 要搜尋的陣列

key - 要搜尋的值

返回:

如果它包含在陣列中,則返回搜尋鍵的索引;否則返回 (-(插入點) - 1)。插入點 被定義為將鍵插入陣列的那一點:即第乙個大於此鍵的元素索引,如果陣列中的所有元素都小於指定的鍵,則為 a.length。注意,這保證了當且僅當此鍵被找到時,返回的值將 >= 0。

binarysearch方法體:

public

static

intbinarysearch

(int

a,int key)

解析

返回方法(binarysearch0):

binarysearch方法體中的返回方法:

/** 引數: 	a:查詢陣列 	fromindex:0	toindex:查詢陣列長度	key:查詢值*/

//★:假設陣列長度為10 數值為:1,2,3,4,5,6,7,8,9,10

private

static

intbinarysearch0

(int

a,int fromindex,

int toindex,

int key)

return

-(low +1)

;// 雖然上述while**塊常理來說可以查詢到中間值並返回,但總有列外,如果while迴圈體查詢不到那麼返回-(low(查詢範圍初始下標)+)1

}

問題:
int mid =

(low + high)

>>>1;

提問:這裡為什麼要使用位運算子,這裡借助(low + high)

/2 不是相同的意思嗎?

解答:如果我們使用/

2那麼程式還需要間接進行處理,會減慢程式的執行速度,而我們使用》來運算是直接和計算機打交 道,可以提公升程式的效率和準確性

binarysearch解析:

二分法查詢數字 演算法分析和原始碼

採用二分法查詢數字是用的比較多的一種方法 其演算法思想可以這樣理解 比如有一行數 1 6 9 10 15 要找到其中某乙個數的位置,最簡單的一種演算法是窮舉法,顧名思義,就是遍歷這一行所有的數,比較,最後找到這個數,然後輸出位置,如果到最後還是沒有,就列印說沒有找到該數 這裡涉及到乙個概念,就是演算...

二分查詢法 折半查詢法 分析示例

眾所周知二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。下面我們直接上原始碼分析注釋 package com.aozhi.test public class binarysearch else ...

二分查詢法

二分查詢要求 1.必須採用順序儲存結構 2.必須按關鍵字大小有序排列。優缺點 折半查詢法的優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。演算法思想 首先,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者...