二分查詢(一)

2021-10-12 00:24:16 字數 1093 閱讀 8681

二分查詢:

1.首先找到列表中排在中間的元素,比較目標元素與該元素的大小,如果中間的元素等於目標元素,則返回true,否則返回false

2.如果目標元素比該元素大,則在中間元素與最後乙個元素之間重複步驟1(在中間元素右邊進行查詢目標元素)

3.如果目標元素比該元素小,則在中間元素與第乙個元素之間重複步驟1(在中間元素左邊進行查詢目標元素)

注意:進行二分查詢的元素必須是有序的

二分查詢實現**如下:

def

bin_search

(arr,target)

: length =

len(arr)

mid =

int(length /2)

# 找到中間元素(需要進行型別轉換)

if target == arr[mid]

:# 如果該元素等於目標元素

return

true

if length ==

1and arr[0]

!= target:

# 目標元素不存在

return

false

if target > arr[mid]

:return bin_search(arr[mid+1:

],target)

# 在列表的右半邊遞迴進行二分查詢

else

:return bin_search(arr[

:mid]

,target)

# 在列表的左半邊遞迴進行二分查詢

data =[9

,5,2

,7,8

,6]data.sort(

)print

(bin_search(data,3)

)

**的執行結果如下:

false

process finished with exit code 0

備註:這種解法使用了遞迴的方式實現了二分查詢,使用遞迴的好處是邏輯相對簡單直觀,當然我們也可以使用迴圈的方式來實現相同的功能。

二分查詢(一)

在演算法題目中,很重要的乙個就是邊界條件的設定,需要我們去明確,變數代表的含義,在迴圈的過程中一直保證此變數的含義不發生變化。含義不發生變化,而非變數值。class binaryclass system.out.println binarysearch2 arr,arr.length,4 publi...

二分查詢(一)

非遞迴實現 public int bsearch int a,int n,int value else if a mid value else return 1 著重強調一下容易出錯的 3 個地方。1.迴圈退出條件 注意是 low high,而不是 low2.mid 的取值 實際上,mid low ...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...