二分查詢的核心思想理解起來非常簡單,有點類似分治思想。即每次都通過跟區間中的中間元素對比,將待查詢的區間縮小為一半,直到找到要查詢的元素,或者區間被縮小為 0,時間複雜度為o(logn)。
二分查詢雖然效能比較優秀,但應用場景也比較有限:
1.底層必須依賴陣列,主要原因是二分查詢演算法需要按照下標隨機訪問元素。
2.還要求資料是有序的,如果資料沒有序,我們需要先排序。所以,如果我們針對的是一組靜態的資料,沒有頻繁地插入、刪除,我們可以進行一次排序,多次二分查詢。這樣排序的成本可被均攤,二分查詢的邊際成本就會比較低。但是,如果我們的資料集合有頻繁的插入和刪除操作,要想用二分查詢,要麼每次插入、刪除操作之後保證資料仍然有序,要麼在每次二分查詢之前都先進行排序。針對這種動態資料集合,無論哪種方法,維護有序的成本都是很高的。
public
class
binarysearch
;int target = arr[
newrandom()
.nextint
(arr.length)];
int index =
find
(arr, target)
; system.out.
println
(target +
" "+ index);}
/** * 在有序陣列arr中,查詢target
* 如果找到target,返回相應的索引index
* 如果沒有找到target,返回-1
*/private
static
intfind
(int
arr,
int target)
private
static
intfind
(int
arr,
int target,
int l,
int r)
else
if(target < arr[mid]
)else
}}
查詢演算法 二分法
二分查詢演算法的基本思想 一.首先確定該區間的中間元素位置 mid low high 2 mid代表區間內中間元素的位置 low代表區間內最左邊元素的位置 high代表區間內最右邊元素的位置 二.將待查key元素值與中間元素mid的值 array mid 比較,如果相等,則查詢成功,否則確定新的查詢...
演算法 二分法查詢
1 2 二分法實驗 31 設a 0 n 1 是乙個已排好序的陣列.4請改寫二分搜尋演算法,使得當搜尋元素x不在陣列中時,5返回小於x的最大元素的位置i和大於x的最大元素位置j.6當搜尋元素在陣列中時,i和j相同,均為x在陣列中的位置.72 設有n個不同的整數排好序後存放於t 0 n 1 中,8若存在...
演算法 二分法查詢
免費 二分法查詢主要是為了快速查詢給定陣列內,期待值在陣列中的位置 下標 二分法查詢通過對整個陣列取中間值,判斷期待值所在的範圍並縮小範圍,每次查詢範圍折半,直到範圍的邊界重合,得出期待值的位置,如果找不到返回null 二分法有乙個先決條件是 陣列內元素必須是有序的 給定乙個包含1,3,5,7,8,...