陣列中的二分法查詢

2022-10-11 04:33:09 字數 2554 閱讀 2396

二分法查詢:

第一:二分法中查詢建立在排序的基礎之上。

第二:二分法查詢效率要高於「乙個挨著乙個」的這種查詢方式。

第三:二分查詢法原理?

10(0下標) 23 56 89 100 111 222 235 500 600

目標:找出600下標

(0 + 9) / 2 --> 4(中間元素的下標)

arr[4]這個元素就是中間元素:arr[4]是100

100 < 600

說明被查詢的元素在100的右邊。

那麼此時開始下標變成:4 + 1

(5 + 9) / 2 --> 7 (中間元素的下標)

arr[7] 對應的是:235

235 < 600

說明被查詢的元素在235的右邊。

開始下標又進行了轉變:7 + 1

(8 + 9) / 2 --> 8

arr[8] --> 500

500 < 600

開始元素的下標又發生了變化:8 + 1

(9 + 9) / 2 --> 9

arr[9]是600,正好和600相等,此時找到了。

不用二分法查詢案例:

package

com.j**ase.arrays;

/*陣列的元素查詢:

陣列元素查詢有兩種方式:

第一種方式:乙個乙個挨著找,直到找到為止。

第二種方式:二分法查詢(演算法)。這個效率高。 */

public

class

arrayssearch ;

//需求:找出87的下標。如果沒有返回-1

/*for (int i = 0; i < arr.length;i++)

}// 程式執行到此處,表示沒有87

system.out.println("不存在87的元素");

*///

最後以上的程式封裝乙個方法,思考:傳什麼引數?返回什麼值?

//傳什麼:第乙個引數是陣列,第二個引數是被查詢的元素。

//返回值:返回被查詢的這個元素的下標。如果找不到返回-1。

int index = arraysearch(arr,87);

system.out.println(index == -1 ? "該元素不存在" : "該元素下標是:" +index);

}/*** 從陣列中檢索某個元素的下標

* @param

arr 被檢索的陣列

* @param

i 被檢索的元素

* @return

大於等於0的數表示元素的下標。-1表示該元素不存在。

*/public

static

int arraysearch(int arr, int

i) }

return -1;

}}

模擬j**a.util.arrays;中的二分法查詢案例:

package

com.j**ase.arrays;

/*1 陣列工具類:自己寫的。不是sun的

2 關於查詢演算法中的:二分法查詢。

10(下標0) 11 12 13 14 15 16 17 18 19 20(下標10) arr陣列

通過二分法查詢,找出18這個元素的下標。

(0 + 10) / 2 --> 中間元素下標是5

拿著中間這個元素和目標要查詢的元素進行對比:

中間元素是arr[5] arr[5] --> 15

15 < 18(被查詢的元素)

被查詢的元素18目前中間元素15的右邊。

所以開始元素的下標從0變成5 + 1

在重新計算乙個中間元素的下標:

開始下標是: 5 + 1

結束下標是:10

(6 + 10) / 2 --> 8

8下標對應的元素arr[8]是18

找到的中間元素正好和被找的元素18相等。

二分法查詢的種植條件:一直折半,直到中間的那個元素恰好是被查詢的元素。

3 二分法查詢演算法是基於排序的基礎之上。(沒有排序的資料是無法查詢的) */

public

class

arraysutil ;

//找出arr這個陣列彙總200所在的下標。

//呼叫方法

int index = binarysearch2(arr,222);

system.out.println(index == -1 ? "該元素不存在!" : "該元素的下標是:" +index);

}/*** 從陣列中查詢目標元素的下標

* @param

arr 被查詢的陣列(這個必須是已經排序的。)

* @param

dest 目標元素

* @return

-1表示該元素不存在,其它表示返回該元素的下標。

*/public

static

int binarysearch2(int arr, int

dest)

else

if (arr[mid] }

return -1;

}}

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

python二分法查詢 Python 二分法查詢

二分法查詢主要的作用就是查詢元素 lst 1,3,5,7,12,36,68,79 資料集 百萬級資料 num int input 請輸入你要查詢的元素資訊 for el in lst if num el print 存在 break else print 不存在 len lst 0 1 2 3 4 ...

二分法查詢

前幾天csdn上說只有10 程式設計師能寫出正確的二分法查詢 so.我在看過二分法查詢方法後寫了乙個 一次測試成功.範圍 需要次數 10 4 100 7 1000 10 10000 14 100000 17 1000000 20 除了對特別小的陣列外,二分法查詢表現是非常優秀的.每次對範圍加倍可以建...