Python實現二分查詢 折半查詢

2021-09-27 08:51:24 字數 1187 閱讀 5960

我們在學習程式語言或者演算法設計的時候,總是繞不過查詢演算法和排序演算法。對於順序查詢和冒泡查詢我們應該是最熟悉的了,如果這兩個還不會,真的要加把勁兒了。

剛好最近演算法老師在講分治思想,剛好二分查詢就是根據分治思想進行設計的。

在有序陣列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

路漫漫其修遠兮 吾將上下而求索

折半 二分 查詢

遞迴入門 假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存...

二分查詢(折半查詢)

二分查詢 折半查詢 從有序序列中找到給出的要查詢的數字。原理是 首先把乙個有序序列中間位置的值與要查詢的數比較,若相等則找到了有序序列中的此數 否則比較兩者的大小,若前者大,則把有序序列的中間位置以前的元素都去掉,餘下的元素組成乙個新的有序數列繼續上一步的操作,直到找到為止 若後者大,則把有序數列中...

折半查詢(二分查詢)

折半查詢 又稱二分查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有 序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前...