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