二分查詢演算法的實現與原理解析

2021-10-12 01:29:06 字數 2505 閱讀 2612

二分查詢演算法的前提:陣列必須是有序陣列

二分查詢演算法思路分析(遞迴版):如果 mid == findval ,查詢到目標值,返回即可

編寫二分查詢演算法:

1.查詢到目標值就返回

//注意:使用二分查詢的前提是 該陣列是有序的.

public

class

binarysearch

;int resindex =

binarysearch

(arr,

0, arr.length -1,

1000);

system.out.

println

("resindex="

+ resindex);}

// 二分查詢演算法

/** *

* @param arr 陣列

* @param left 左邊的索引

* @param right 右邊的索引

* @param findval 要查詢的值

* @return 如果找到就返回下標,如果沒有找到,就返回 -1

*/public

static

intbinarysearch

(int

arr,

int left,

int right,

int findval)

int mid =

(left + right)/2

;int midval = arr[mid];if

(findval > midval)

else

if(findval < midval)

else

}}

resindex=

4

2. 二分查詢(返回滿足目標值的所有值)編寫二分查詢演算法:查詢到所有目標值,在找到目標值之後,分別往左、往右進行擴散搜尋

//注意:使用二分查詢的前提是 該陣列是有序的.

public

class

binarysearch

; list

resindexlist =

binarysearch

(arr,

0, arr.length -1,

1000);

system.out.

println

("resindexlist="

+ resindexlist);}

// 完成乙個課後思考題:

/* * 課後思考題: 當乙個有序陣列中, 有多個相同的數值時,如何將所有的數值都查詢到,比如這裡的

* 1000

* * 思路分析 1. 在找到mid 索引值,不要馬上返回 2. 向mid 索引值的左邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合arraylist

* 3. 向mid 索引值的右邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合arraylist 4. 將arraylist返回

*/public

static list

binarysearch

(int

arr,

int left,

int right,

int findval)

int mid =

(left + right)/2

;int midval = arr[mid];if

(findval > midval)

else

if(findval < midval)

else

// 否則,就temp 放入到 resindexlist

resindexlist.

add(temp)

; temp -=1;

// temp左移

} resindexlist.

add(mid);//

// 向mid 索引值的右邊掃瞄,將所有滿足 1000, 的元素的下標,加入到集合arraylist

temp = mid +1;

while

(true

)// 否則,就temp 放入到 resindexlist

resindexlist.

add(temp)

; temp +=1;

// temp右移

}return resindexlist;}}

}

程式執行結果

resindexlist=[4

,5,6

]

二分查詢演算法解析

參考文章 二 分查詢,你真的掌握了嗎?目標 在乙個有序的陣列中,找出指定資料所處的位置。時間複雜度就是重複次數的同一量級 order 通俗講就是迴圈次數的同一量級啦。這樣看,初始時,查詢範圍大小為n 陣列的長度 第一次迴圈後,查詢範圍大小為n 2 第二次迴圈後,查詢範圍大小為n 4 第三次迴圈後,查...

二分查詢演算法原理和實現

二分查詢是一種比較高效的搜尋演算法,是一種可以在有序陣列中搜尋到特定元素的演算法。例如,我們要在陣列中搜尋4 還是先找到陣列的中間位置,這次因為是偶數,我們就取1吧 這裡是按照自己取中間位置的演算法實際去取 4比1小,那麼要往右邊陣列搜尋,右邊陣列即為 那麼,陣列只有乙個元素,那麼中間位置肯定就是自...

二分查詢演算法的理解

在做lis的o nlgn 演算法時,用到了二分查詢演算法。對於其中的一些條件,例如 l二分查詢因為有幾個限制,其中乙個便是 單調序列 這個要求,所以可能出現 2 3 4 4 4 5 6這樣的陣列,那麼返回第乙個出現的位置便是 i 3時。i0 1234 56a i 23 4445 6while lef...