06查詢演算法之二分查詢

2021-10-01 22:35:01 字數 1672 閱讀 9048

確定陣列中間的下標 mid = (left+right)/2

然後讓需要查詢的數 findval和arr[mid]比較

​ 2.1 如果findval>arr[mid],說明要查詢的數在mid的右邊,因此需要遞迴的向右查詢

​ 2.2 如果findval​ 2.3 如果findval==ar[mid],說明找到就返回

什麼時候結束遞迴?

​ 3.1、找到就結束

​ 3.2、遞迴完整個陣列,仍然沒有找到findval,也需要結束遞迴,當left>right需要結束遞迴

package g查詢;

/** * @author zhou jian

* @date 2020 $ 2020/1/5 0005 15:48

* 二粉查詢: 使用二分查詢的前提 該陣列是有序的

*/public

class

binarysearch

;int index =

binarysearch

(arr,

0,arr.length-1,

4); system.out.

println

(index);}

//二分查詢

/** *

* @param arr 陣列

* @param left 左邊索引

* @param right 右邊索引

* @param value 要查詢的值

* @return

*/public

static

intbinarysearch

(int

arr,

int left,

int right,

int value)

int mid =

(left+right)/2

;if(arr[mid]

>value)

else

if(arr[mid]

else

}}

當乙個有序陣列中,有多個相同的數值時,如何將所有的數值都查詢到,比如這裡的1000

[1,8,10,89,1000,1000,1234]

//完成乙個課後思考題

//當乙個有序陣列中,有多個相同的數值時,如何將所有的數值都查詢到,比如這裡的1000

//在找到mid值時,不要馬上返回

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

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

//3、將arraylist返回就可

//[1,8,10,89,1000,1000,1234]

public

static

void

binarysearch2

(int

arr,

int left,

int right,

int value)

int mid =

(left+right)/2

;if(arr[mid]

>value)

else

if(arr[mid]

else

}

查詢演算法之 二分查詢

這個例項給出了二叉搜尋演算法在9個元素的陣列arr中查詢某個目標值的過程01 2345 678 7 35812 1623 3355 例子1 查詢目標值2301 2345 678 7 35812 1623 3355 步驟1 索引範圍 0,9 索引first 0,last 9,mid 0 9 2 4 t...

查詢演算法之二分查詢

二分查詢,也是經常會問道的,以下寫法主要是針對已經排好序,且不會受到重複元素影響的陣列使用。二分查詢 param string find 要查詢的值 param array array 要查詢的陣列 return bool string function binarysearch find arra...

查詢演算法之二分查詢

在乙個排好序的陣列t 1 n 中查詢x,如果x在t中,輸出x在t的下標j 如果x不在t中,輸出j 0。對於這樣的有序序列,可以使用二分查詢的演算法來實現。如下圖序列,二分查詢20。在有序表中,取中間資料作為比較物件,若給定值與中間記錄的數值相等,則查詢成功 若給定值小於中間值的數值,則在中間值的左半...