我們在學習程式語言或者演算法設計的時候,總是繞不過查詢演算法和排序演算法。對於順序查詢和冒泡查詢我們應該是最熟悉的了,如果這兩個還不會,真的要加把勁兒了。
剛好最近演算法老師在講分治思想,剛好二分查詢就是根據分治思想進行設計的。
在有序陣列nums中查詢乙個數字x,順序查詢的方法是將陣列nums中的元素乙個乙個與x進行比較,時間複雜度為o(n
)o(n)
o(n)
。二分查詢的主要思想是:充分利用陣列nums已經排好序的特點,我們取陣列nums的中間位置(mid)的元素n
1n_1
n1,用n
1n_1
n1與目標數字x進行比較,如果n
1n_1
n1 等於x,那麼直接返回n
1n_1
n1的位置mid;如果n
1n_1
n1大於x,則說明x如果在陣列中的話,一定是在n
1n_1
n1的左側;如果n
1n_1
n1小於x,則說明x如果在陣列中的話,一定是在n
1n_1
n1的右側。
那我們只要重複上面的步驟就可以找到目標數字x在陣列nums中的位置(或不存在nums中)
python3實現二分查詢的**如下:
#binarysearch:find the location of the target number
defbinarysearch
(nums:
list
,x:int)-
>
int:
''' nums: sorted array from smallest to largest
x: target number
'''left,right =0,
len(nums)-1
while left <= right:
mid =
(left+right)//2
if nums[mid]
== x:
return mid
if nums[mid]
< x:
left = mid+
1else
: right = mid-
1return
none
路漫漫其修遠兮 吾將上下而求索 折半 二分 查詢
遞迴入門 假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存...
二分查詢(折半查詢)
二分查詢 折半查詢 從有序序列中找到給出的要查詢的數字。原理是 首先把乙個有序序列中間位置的值與要查詢的數比較,若相等則找到了有序序列中的此數 否則比較兩者的大小,若前者大,則把有序序列的中間位置以前的元素都去掉,餘下的元素組成乙個新的有序數列繼續上一步的操作,直到找到為止 若後者大,則把有序數列中...
折半查詢(二分查詢)
折半查詢 又稱二分查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有 序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前...