設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 複雜度...