深刻理解二分(折半查詢)

2021-07-11 14:36:32 字數 951 閱讀 2919

二分查詢演算法真是乙個老生常談的話題了,相信很多人都能解發布二分查詢演算法的原理並加以一定的演示。但是如果讓你空手碼出一段沒有bug的二分查詢的**,恐怕就沒有說的那麼簡單了(十個二分九個錯)。歸根結底,還是自己對演算法的細節部分沒有完全掌握,即區間問題

大家一定見過不同版本的二分演算法,有的while判斷條件是<=,有的while判斷條件是<;有的mid=r,有的mid=r-1。(這就是不同區間表示形式所導致的)

int binary_search1(int

array, int n, int key)

else

if (array[mid] < key)

else

}return -1; //沒有找到key值,返回-1

}

int binary_search2(int

array, int n, int key)

else

if (array[mid] < key)

else

}return -1; //沒有找到key值,返回-1

}

1.[a,b)

2.[a,b]

當我們選擇了一種區間的表達形式後,就要在**體現左右邊界的地方進行相應的處理。不要混用區間的表達形式,比如起初你選擇[a,b)這種區間表達形式,而接下來又不知不覺把區間表達形式寫成了[a,b]。這種錯誤完全是可以避免的,不要把問題複雜化,簡單的說就是一條路走到底。

相信很多二分查詢的bug都源於區間開閉問題,只要理解了兩種區間的相同之處和不同之處,無論是什麼版本的二分你都可以一眼看出其中的對與錯。

二分 折半 查詢

折半查詢 又叫二分查詢,採用分治思想,適用於不經常變動且查詢頻繁的表 演算法思想 將n個元素 假設n個元素公升序 分為大致相同的兩部分,取data n 2 與目標元素m比較 若data n 2 m return n 2 若data n 2 m 則我們只要在data的左半部分繼續查詢 若data n ...

二分 折半 查詢

二分查詢 請對乙個有序陣列進行二分查詢 輸入乙個數看看該陣列是否存在此數,並且求出下 標,如果沒有就提示 沒有這個數 二分查詢演算法的思路 二分 折半 查詢條件 有序陣列。public class binarysearch 不考慮有重複元素的查詢。int index solutionsearch a...

C 二分 折半 查詢

首先,假設表中元素是按公升序排列,將表 中間位置記錄的關鍵字 與 查詢關鍵字 進行比較,如果兩者相等,則查詢成功。否則,利用 中間位置的記錄 將表分成 前後 兩個子表 1 如果 查詢關鍵字 2 如果 查詢關鍵字 中間關鍵字 後子表查詢。重複以上過程,直到查詢成功。include include us...