演算法分析與設計二分搜尋問題Python

2021-09-29 17:44:39 字數 1565 閱讀 5732

設a[0:n-1]是已排好序的陣列。試改寫二分搜尋演算法,使得當搜尋元素x不在陣列a中時,返回小於x的最大元素的位置i和大於x的最小元素的位置j;當搜尋元素x在陣列a中時,返回x在陣列中的位置,此時i和j相同。

def binary_search

(arr_list, arr_lookup)

: arr_long =

len(arr_list)

first =

0 last = arr_long -

1while first < last:

mid =

(last + first)

// 2

if arr_list[mid]

> arr_lookup:

last = mid

elif arr_list[mid]

< arr_lookup:

first = mid +

1else

:return mid

if __name__==

'__main__'

:print

("請輸入陣列資料:"

,end="")

arr_list=

list

(map

(int,

input()

))arr_list.

sort()

print

("你輸入的陣列為:"

,end="")

print

(arr_list)

arr_long=

len(arr_list)

print

("請輸入您要查詢的數字:"

) arr_lookup=

int(

input()

)if arr_lookup in arr_list:

x =binary_search

(arr_list,arr_lookup)

print

("數字存在陣列當中!陣列下標為:"

,x)else

:print

("你要找的數字不在這個列表裡!"

)for y in

range

(arr_long)

:if arr_list[y]

y+=1else:if

max(arr_list)

print

("沒有比你查詢數字更大的了!"

)print

("比查詢數字小的最大陣列元素下標為"

,arr_long-1)

elif min

(arr_list)

>arr_lookup:

print

("沒有比查詢數字還小的了!"

)print

("比查詢數字大的最小陣列元素下標為0"

)else

:print

("比尋找數字大的下標為"

,y)print

("比尋找數字小的下標為"

,y-1

)break

演算法 二分搜尋

思路 首先從陣列中間的數把陣列分成兩部分,如果查詢的數比中間的數大,說明接下來需要查詢右邊的部分,令中間的的下標 1為下一次開始查詢的開始位置,再從low到high之間查詢,一直迴圈。root bogon code cat erfen.c include int work int x,int a,i...

演算法設計技巧與分析(1)二分搜尋的前提 線性搜尋

從今天起複習演算法,寫的不對的地方還請各路大神指點迷津,神仙請繞道。1.問題描述 給定乙個長度為n的陣列a,查詢元素x是否在a中。2.解決方案描述 一種最直接的方法是掃瞄a中的所有專案,將每個專案與x比較,如果找到相等的專案a i 則返回陣列下標i,否則返回 1,表示沒找到。這種方法成為順序搜尋,由...

二分搜尋與STL二分查詢

用法 搜尋非遞減數列中是否包含某個元素 當資料量比較大的時候,二分比線性搜尋高效得多。流程 查詢36 實現 物件是非遞減序列,如果當資料無序時,需要預先進行一次排序。int binarysearch int a,int key,int n n為陣列長度 rerurn 0 陣列a中不存在key 複雜度...