二分查找
二分查找过程:首先,把输入的n个数的序列按升序排列,将n个数中间位置的数字与查找的数字m比较,如果两者相等,则查找成功;否则利用中间位置数字将表分成前、后两个子序列,如果中间位置的数字大于查找的数字m,则进一步查找前一子序列,否则进一步查找后一序列。重复以上过程,直到找到满足条件的数字,使查找成功,或直到子序列不存在为止,此时查找不成功。
例如:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e3 + 5;
int n, m;
int a[N];
void binarySearch(int m)
{
int left = 0, right = n - 1;
int mid;
while(left <= right)
{
mid = (left + right) / 2;
if(a[mid]==m)
{
cout <<"YES"<<'\n';
return;
}
if(a[mid]>m)
{
right=mid-1;
}
if(a[mid]<m)
{
left=mid+1;
}
}
cout<<"NO"<<'\n';
}
int main()
{
cin >> n;
for(int i = 0 ; i < n ; i++)
{
cin >> a[i];
}
sort(a, a+n);
cin >> m;
binarySearch(m);
return 0;
}
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 1e3 + 5;
int n, m;
int a[N];
void binarySearch(int m)
{
int left = 0, right = n - 1;
int mid;
while(left <= right)
{
mid = (left + right) / 2;
if(a[mid]==m)
{
cout <<"YES"<<'\n';
return;
}
if(a[mid]>m)
{
right=mid-1;
}
if(a[mid]<m)
{
left=mid+1;
}
}
cout<<"NO"<<'\n';
}
int main()
{
cin >> n;
for(int i = 0 ; i < n ; i++)
{
cin >> a[i];
}
sort(a, a+n);
cin >> m;
binarySearch(m);
return 0;
}