資料結構學習(十二) 二分查詢

2021-10-23 00:21:56 字數 1578 閱讀 7538

首先確定該陣列的中間的下標;

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

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

2.2 findval

什麼時候結束遞迴

3.1 找到結束遞迴;

3.2 遞迴完整個陣列,仍然沒有找到findval,left>right時結束。

//arr:陣列

//left:左邊的索引

//right:右邊的索引

//findval:要找的值

//如果找到就返回下標,沒有找到就返回-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

}

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

//如果有多個,按照上面的方法,將返回最右邊那個的索引

/* 思路分析:

1.找到mid索引值,不要馬上返回

2.向mid的左邊掃瞄,將所有滿足1000元素的下標,加入到arraylist

3.向mid的右邊掃瞄,將所有滿足1000元素的下標,加入到arraylist

4.將arraylist返回

*/public

static arraylist

binarysearch2

(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左移

temp -=1;

} resindexlist.

add(mid)

;//向mid的右邊掃瞄,將所有滿足1000元素的下標,加入到arraylist

temp = mid +1;

while

(true

)//將temp放入到resindexlist

resindexlist.

add(temp)

;//temp右移

temp +=1;

}return resindexlist;

}}

資料結構與演算法 十二 二分查詢和插值查詢

有乙個遊戲最能體現二分查詢的思路 我在紙上已經寫好了100以內的正整數數字,然後請你猜,問最多幾次可以猜出來?這個遊戲的解法就是每次猜數後折取一半,我們把這種每次取中間記錄查詢的方法叫做折半查詢,或二分查詢。二分查詢 binary earch 也稱為折半查詢。它的前提是線性表中的記錄必須是關鍵碼有序...

資料結構學習

什麼是資料結構 對計算機記憶體中的資料的一種安排。資料結構有那些?優缺點?1.陣列 插入快 知道下標 查詢慢,刪除慢,大小固定 2.有序陣列 比無序的查詢塊,刪除和插入慢,大小固定 3.棧 吃多了吐 個人理解 4.佇列 吃多了拉 個人理解 5.鍊錶 插入快,刪除快,查詢慢 6.二叉樹 查詢 插入 刪...

資料結構學習

鍊錶 class listnode definit self,x self.val x 節點值 self.next none 後繼節點值 例項化節點 n1 listnode 4 節點head n2 listnode 5 n3 listnode 1 構建引用指向 n1.next n2 n2.next ...