python之折半查詢演算法

2021-09-24 02:13:35 字數 1961 閱讀 3046

折半查詢演算法也叫二分查詢演算法。演算法的細節我就不講了。但是必須說一下二分查詢是基於我們之前的資料是有序的,如果沒有序該演算法是沒有意義的。個人覺得**比較直觀,所以我這裡就直接上**了。

#折半查詢非遞迴演算法

#折半查詢函式

#引數 陣列 起始位置 結束位置 資料

def search(arr,start,end,data):

while(start<=end):

half=int((start+end)/2)

if(arr[half][0]==data):

return half

elif(arr[half][0]>data):

end=half-1

else:

start=half+1

#為了防止找不到

return -1

#列印函式

def myprint(arr,index):

if(index!=-1):

name=arr[index][1]

print('name : ',name)

else:

print('no found')

arr=[[201701,'張三'],[201703,'李四'],[201710,'王麻子'],[201713,'隔壁老王']]

print('search 201713')

index=search(arr,0,3,201713)

myprint(arr,index)

print('search 2017102')

index=search(arr,0,3,2017102)

myprint(arr,index)

輸出結果

search 201713

name : 隔壁老王

search 2017102

no found

#折半查詢遞迴演算法

#引數 陣列 起始位置 結束位置 資料

def search(arr,start,end,data):

half=int((start+end)/2)

if(start<=end):

#相等的時候返回位置

if(arr[half][0]==data):

return half

elif(arr[half][0]>data):

result=search(arr,start,half-1,data)

else:

result=search(arr,half+1,end,data)

#因為有可能沒有找到,所以這裡有乙個判斷語句

if(result==none):

return -1

else:

return result

#列印函式

def myprint(arr,index):

if(index!=-1):

name=arr[index][1]

print('name : ',name)

else:

print('no found')

arr=[[201701,'張三'],[201703,'李四'],[201710,'王麻子'],[201713,'隔壁老王']]

print('search 201713')

index=search(arr,0,3,201713)

myprint(arr,index)

print('search 2017102')

index=search(arr,0,3,2017102)

myprint(arr,index)

結果如下:

search 201713

name : 隔壁老王

search 2017102

no found

查詢演算法之折半查詢

binary search 折半查詢又稱二分查詢,要求資料序列呈線性結構,即先排序,在查詢。可以明顯的提高查詢速度,其流程如下 預設陣列為a 需查詢的值為x 首先設定3個變數low mid high,分別儲存陣列元素開始 中間和末尾元素的序號。接著進行以下判斷。1 如果陣列中序號為mid的值與需查詢...

java演算法之折半查詢

int mid low high 2 0 6 2 3 a mid a 3 20 因為 num a mid 所以 low mid 1 4 high 6 step2 mid 4 6 2 5 a mid a 5 35 因為 num a mid 所以 low mid 1 high 6 step3 mid l...

基礎演算法之五 查詢 折半查詢

折半查詢 又稱為二分查詢。這種查詢方法要求查詢表的資料是線性結構儲存,並且還要求查詢表中的資料是按關鍵字由小到大有序排列。折半查詢 二分查詢 是一種簡單而又高效的查詢演算法,其查詢長度至多為 2n 1 判定樹的深度 平均查詢長度為 2 n 1 1,效率比順序查詢要高,但折半查詢只能適用於順序儲存有序...