鳳凰網招聘二分查詢python實現

2021-08-03 23:47:35 字數 1524 閱讀 8604

設有一組關鍵字序列,使用二分(折半)法查詢關鍵字93需要進行多少次比較()

a. 2

b. 3

c. 4

d. 5

分析:

二分查詢基本思想為:在有序序列中,取序列最中間的元素作為比較物件,若給定值與中間記錄的關鍵碼相等,則查詢成功;若給定值小於中間記錄的關鍵碼,則在中間記錄的左半邊繼續查詢;若給定值大於中間記錄的關鍵碼,則在中間記錄右半邊區繼續查詢。不斷重複上述過程,直到查詢成功,或所查詢的區域無記錄,查詢失敗。

二分查詢的時間複雜度是o(log(n)),最壞情況下的時間複雜度是o(n)。

對於本題:首先第一次比較93和最中間的元素55,93>55,然後新的區間為【78,81,93,97,111】

第二次比較新區間最中間的元素93,發現93 = 93,查詢成功,返回下標

查詢兩次,因此選a。

**實現:python

#-*-coding=utf-8 -*-

s =

raw_input().split(',')

m =

int(raw_input())

s =

list(s)

#print s

def

binarysearch(str

, m):

count =

0#計數器,記錄查詢次數

leap = -

1#布林變數,-1表示查詢失敗

low =

0high =

len(str) -

1while (low <= high):

count +=

1#計數器加1,表示新的查詢開始

mid = (low + high) /

2obj =

int(str[mid])#因為輸入的字串,首先要轉化成整型

if obj < m:

low = mid +

1elif obj > m:

high = mid -

1elif obj == m:

print mid

leap =

1#查詢成功就將leap置1

break

#跳出迴圈,查詢結束

print

'total %d search(es)'

% count

if leap == -1:

print

'search no data'

print -1

#leap值還是-1表示查詢失敗

binarysearch(s,m)

輸出示例:

5,8,14,20,31,55,78,81,93,97,111

9total 4 search(es)

search no data-1

5,8,14,20,31,55,78,81,93,97,111938

total 2 search(es)

process finished with exit code 0

Python二分查詢

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

python 二分查詢

搜尋過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜尋過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜尋演算法每一次比較都使搜尋範圍縮小一半 param array ...

二分查詢(Python)

演算法介紹 二分查詢要求陣列為有序排列,每次取中間的數與target進行比較,若相等,則查詢成功 若中間數較大,則在前一部分查詢,反之,在後一部分查詢。其時間複雜度為o logn 演算法實現def binarysearch nums,target if not nums return false s...