二分算法步骤描述
前提:有序数组中查找关键词所在的位置
① 首先确定整个查找区间的中间位置 mid = strat+(end-strat)/2
② 用待查关键字key值与中间位置的关键字值进行比较;
若相等,则查找成功
若大于,则在后(右)半个区域继续进行折半查找
若小于,则在前(左)半个区域继续进行折半查找
③ 对确定的缩小区域再按折半公式,重复上述步骤
#include<bits/stdc++.h>
using namespace std;
int BinarySearch(int left,int right,int a[],const int x)
{
if(left<=right)
{
int middle = (left+right)/2;
if(a[middle]==x)
{
return middle;
}
else if(x>a[middle])
{
return BinarySearch(middle+1,right,a,x);
}
else
return BinarySearch(left,middle-1,a,x);
}
return -1;
}
int main()
{
int n;
int a[n];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
sort(a,a+n);
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
int index = 0;
cin>>index;
int x = BinarySearch(0,n,a,index);
if(x==-1)
cout<<"not found!";
else
cout<<x;
return 0;
}
运行效果:
4
1 2 3 4
4
3
4
1 2 3 4
6
not found