1. 程式人生 > >二分查找的使用說明

二分查找的使用說明

否則 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;
}


二分查找的使用說明