二分查詢 遞迴與非遞迴

2021-08-10 02:15:25 字數 500 閱讀 4223

最近做了一道題目,在弄清原理之後發現怎麼也過不去,找了幾個小時的bug,結果問題就出現在二分查詢的知識點上,暑假是有接觸過二分的題目,應該是沒有完全理解才會在昨天的那道題上碰釘子,藉此寫一下對二分的理解來鞏固鞏固以前的知識。

一談起查詢,最先想到的無非是遍歷整組資料,複雜度為o(n),但是對於一組有規律的資料,比如按大小順序排列的一組,這時再進行查詢時就可以邊比較邊查詢.首先從中間斷開,比較中間的數值與待查詢的x大小關係,若大於x,則x一定在整組資料的左邊,反之,在右邊,這樣,每次查詢只需查詢資料的一半長度即可,直到找到為之返回元素所在的位置,那麼總的複雜度就是o(log2n)。

遞迴:注意陣列a是有序排列的

int a(int l,int r,int x)

{int m=(l+r)/2;

if(a[m]==x)

return m;

else if(a[m]

非遞迴:

int a(int l,int r,int x)

{while(l

二分查詢(遞迴 非遞迴)

二分查詢是一種查詢效率非常高的查詢演算法。又稱折半查詢。起初在資料結構中學習遞迴時實現二分查詢,實際上不用遞迴也可以實現,畢竟遞迴是需要開闢額外的空間的來輔助查詢。本文就介紹兩種方法 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。使用條件 查詢序...

二分查詢(遞迴與非遞迴方式)

test public void testbinarysearch 非遞迴實現,返回對應的序號 system.out.println binarysearch arr,5 遞迴實現,返回對應的序號 system.out.println binsearch arr,5 非遞迴實現,返回對應的序號 au...

遞迴與非遞迴解決二分查詢

通過縮小查詢範圍,找出由小到大排好序的陣列中間值,判斷與目標值大小關係,進一步縮小範圍,最終得到要查詢的目標值所在的下標。public static int binarysearch int arr,int target else if arr mid target else return 1 通過...