二分查找的使用說明
阿新 • • 發佈:2017-07-08
否則 ont 二分 oal -a tracking pre name tdi
先輸入一個數n。數組a裏面存入n個數,在n個數裏面查找m,假設能找到就輸出YES。否則的話就輸出NO。例子
輸入:
5 3
2 3 4 5 1
輸出:
YES
一般的情況下。時間復雜度為O(n)。當n>100000000的時候。就要考慮到時間復雜度了,所以要用到二分查找,這樣時間復雜度就為log(n)了,在學習二分查找的時候畫出圖更好理解一點
代碼例如以下:
#include<iostream> #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; bool binary_search(int *a,int len,int goal) { int low=0; int high=len-1; while(low<=high) { int mid=(low+high)/2; if(a[mid]==goal) return true; else if(a[mid]>goal) //說明查找的數字在前半部分,故把high指針移到mid-1的位置 high=mid-1; else low=mid+1; //說明查找的數字在後半部分,故把low指針移動到mid+1的位置 } } int main() { int n,m; int a[100]; while(cin>>n>>m) { for(int i=0;i<n;i++) cin>>a[i]; sort(a,a+n); //必需要先排序 bool d= binary_search(a,n,m); if(d) printf("YES\n"); else printf("NO\n"); } return 0; }
二分查找的使用說明