折半查詢(二分查詢)

2021-07-25 08:35:37 字數 1572 閱讀 1213

折半查詢:

又稱二分查詢,優點是比較次數少,查詢速度快,平均效能好;其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有

序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如

果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功,或直到子表不存在為

止,此時查詢不成功。

折半查詢分遞迴查詢和非遞迴查詢兩種方法:

1)遞迴查詢:

對陣列a=[1,2,3,4,5,6,8,20,24,31,35]進行遞迴查詢數字5的位置,python**為:

b=5

def binarysearch(array,n,left,right):

mid=left+(right-left)/2

if left>right:

print "error"

return -1

else:

if array[mid]>n:

return binarysearch(array,n,left,mid-1)

elif array[mid]

最後返回得到數字為5的位置的結果:

********** restart: i:\python_datastructure\折半查詢(二分查詢).py **********

right

4>>>

注釋:如果要查詢的數字不在陣列中,則會返回以下結果:

********** restart: i:\python_datastructure\折半查詢(二分查詢).py **********

error

-1>>>

2)非遞迴查詢:

對陣列a=[1,2,3,4,5,6,8,20,24,31,35]進行非遞迴查詢數字5的位置,python**為:

c=5

def binarysearch(array,n):

low=0

high=len(a)-1

while low<=high:

mid=(low+high)/2

if array[mid]==n:

print "right"

return mid

elif array[mid]>n:

high=mid-1

else:

low=mid+1

print "find failed"

return -1

res=binarysearch(a,c)

print res

最後返回得到數字為5的位置的結果和1)中遞迴結果一樣:

********** restart: i:\python_datastructure\折半查詢(二分查詢).py **********

right

4>>>

二分查詢(折半查詢)

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

二分查詢(折半查詢)

時間限制 3000 ms 記憶體限制 65535 kb難度 3描述 在某一國度裡流行著一種遊戲。遊戲規則為 在一堆球中,每個球上都有乙個整數編號i 0 i 100000000 編號可重複,現在說乙個隨機整數k 0 k 100000100 判斷編號為k的球是否在這堆球中 存在為 yes 否則為 no ...

折半查詢(二分查詢)

折半查詢 又稱二分查詢 簡單的理解就是整形有序的陣列中,在查詢過程中把要查詢的與陣列最中間的數進行比較以次迴圈進行查詢,找到了返回下標,找不到返回 1。include stdio.h include stdlib.h 折半查詢函式 int binary search int arr,int key,...