Java中二分查詢

2021-09-11 15:18:46 字數 2289 閱讀 9946

給定乙個陣列,我們要查詢當前資料在陣列中的位置,雖然可以使用迴圈乙個個遍歷,但是由於要使**執行時間盡可能的小,所以我們要採用二分法來查詢。

先上**:

public

class

binarysearch

else

if(k > arr[m]

)else

}return-1

;}public

static

void

main

(string[

] args),15

)); system.out.

println

( bs.

binarysearch

(new

int,

-2))

; system.out.

println

( bs.

binarysearch

(new

int,

101));

system.out.

println

( bs.

binarysearch

(new

int,

13));

system.out.

println

("*****=");

system.out.

println

("testing empty or singleton data.");

system.out.

println

( bs.

binarysearch

(new

int,

13));

system.out.

println

( bs.

binarysearch

(new

int,

13));

system.out.

println

( bs.

binarysearch

(new

int,

13));

system.out.

println

("*****=");

system.out.

println

("testing data of size 2.");

system.out.

println

( bs.

binarysearch

(new

int,

13));

system.out.

println

( bs.

binarysearch

(new

int,

12));

system.out.

println

( bs.

binarysearch

(new

int,

11));

}

當使用二分查詢的時候有幾個注意點:

1、當前資料長度是否大於1。

2、陣列的長度範圍如何去定義。

3、在使用二分的時候,如果陣列長度過大,陣列收尾相加資料過大,導致資料溢位咋辦。

解決 第乙個問題:

我們首先判斷陣列的尾減去陣列的頭看是否大於"0"

第二個問題:

我們將陣列.length當成陣列的尾,而不是陣列.length-1,大家都知道陣列下標是從"0"開始的,但是為什麼不用陣列.length-1呢?

我們直接使用陣列.length的時候可以形成乙個左閉右開區間,方便陣列相加。如:[a,b)+[b,c) =[a,c)

而且我們直接使用陣列.length的時候判斷左邊的時候直接小於就行,不用再去判斷等於條件。

第三個問題:

c = ( a + b ) / 2
當a和b過大的時候,a + b的資料就更大,導致資料溢位咋辦,這個時候我們選擇使用

c = a + (b - a) / 2
來解決這個問題。

上面**執行結果:

python中二分查詢

二分查詢也稱折半查詢,它的效率較高。但是二分查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。寫二分查詢時有兩個方法,乙個是用遞迴,乙個不用遞迴。用遞迴的方法如下 coding utf 8 def binary search alist,item 二分查詢。遞迴法 n len ali...

STL中二分查詢

偶然遇到了一些問題,記錄一下 標頭檔案 include 1.binary search 查詢某個元素是否出現。函式原型 bool lower bound forwarditer first,forwarditer last,const tp val 函式功能 在陣列中以二分法檢索的方式查詢,若在陣列...

標準庫中二分查詢演算法

標準庫中二分搜尋演算法 每個演算法都提供兩個版本,第乙個版本用元素型別的小於運算子 來檢測元素,第二個版本則使用給定的比較操作。給定的比較操作可以是函式物件 lambda表示式 定義函式呼叫操作符類的物件。lower bound beg,end,val lower bound beg,end,val...