二分查找算法的原理是在一個有序數組中,通過不斷地將查找範圍縮小為原來的一半,來快速找到特定元素。具體步驟如下:
定義搜尋範圍:首先確定搜尋的起始和結束位置,這些位置在數組中對應於索引`left`和`right`。
計算中間位置:計算當前搜尋範圍中間元素的位置`middle`,這通常是通過將`left`和`right`的和除以2得到的。
比較中間元素:將目標值與中間元素進行比較:
如果中間元素等於目標值,則搜尋成功,返回中間位置的索引。
如果中間元素小於目標值,則目標值只能在右半部分(即`middle`右側的元素),更新`left`為`middle + 1`。
如果中間元素大於目標值,則目標值只能在左半部分(即`middle`左側的元素),更新`right`為`middle - 1`。
繼續搜尋:重複步驟2和3,直到找到目標值或者搜尋範圍為空(即`left`大於`right`),此時表示目標值不存在於數組中。
二分查找的效率依賴於輸入數組的有序性,因為只有在有序數組中,才能通過比較中間元素來有效地縮小搜尋範圍。在每次疊代中,搜尋範圍至少減少一半,這使得二分查找在大數據集上的性能非常高效。
二分查找的時間複雜度是O(log n),其中n是數組的長度。這是因為每次疊代都將搜尋範圍減半,因此最多需要log n次疊代來找到目標值或確定其不存在。