二分搜索算法
阿新 • • 發佈:2019-02-04
一次 sea 有序數組 而且 輸入 使用 using tps -i
目錄
- 介紹
- 時間復雜度和空間復雜度
- 時間復雜度
- 空間復雜度
- 代碼實現
介紹
在計算機科學中,二分搜索(英語:binary search),也稱折半搜索(英語:half-interval search)、對數搜索(英語:logarithmic search),是一種在有序數組中查找某一特定元素的搜索算法。搜索過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結束;如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。如果在某一步驟數組為空,則代表找不到。這種搜索算法每一次比較都使搜索範圍縮小一半。
時間復雜度和空間復雜度
時間復雜度
二分搜索在最壞情況下的復雜度是對數時間,進行O(logn) 次比較操作,n在此處是數組的元素數量。最好情況下O(1).
空間復雜度
如果叠代實現二分搜索則空間復雜度為O(1),如果遞歸實現空間復雜度為O(logn)。無論對任何大小的輸入數據,算法使用的空間都是一樣的。除非輸入數據數量很少,否則二分搜索比線性搜索更快,但數組必須事先被排序。盡管特定的、為了快速搜索而設計的數據結構更有效(比如哈希表),二分搜索應用面更廣。
代碼實現
#include<iostream> #include<algorithm> using namespace std; int main() { int nums[5] = {1,2,3,4,5}; int target = 0; int left = 0,right = 4; int ans = -1; printf("請輸入target:"); scanf("%d",&target); while(left <= right) { int mid = (left+right)/2; if(nums[mid] == target) { ans = mid; break; } else if(nums[mid] > target) { left = mid+1; } else if(nums[mid] < target) { right = mid-1; } } printf("%d",ans); return 0; }
註意:結束條件是left <= right
二分搜索算法