二分查詢:
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小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...