您的位置:首页 > 其它

二分搜索算法的实现

2017-04-05 20:30 155 查看
//二分搜索算法的分治策略
//迭代
#include<iostream>
using namespace std;

int a[100];
int x;

int BinarySearch(int a[],int x,int n)
{//找到x时返回其在数组的位置,否则返回-1
int left=0,right=n-1;
while(left<=right)
{
int middle=(left+right)/2;
if(x==a[middle])
return middle;
if(x<a[middle])
right=middle-1;
else
left=middle+1;
}
return -1;//未找到x
}
int main()
{
int n;
cin>>n;//n个数
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>x;//要找的数
cout<<BinarySearch(a,x,n)<<endl;
return 0;
}

//递归实现
#include<iostream>
using namespace std;

int a[100];

int BinarySearch(int a[],int x,int left,int right)
{//递归
if(left<=right)
{
int middle=(left+right)/2;
if(x==a[middle])
return middle;
if(x<a[middle])
BinarySearch(a,x,left,middle-1);
else
BinarySearch(a,x,middle+1,right);
}
return -1;
}
int main()
{
int n,x;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>x;
cout<<BinarySearch(a,x,0,n-1)<<endl;
return 0;
}

//这是《挑战程序设计竞赛》的二分搜索例题
#include<iostream>
using namespace std;

int a[100],b[100];
int count=0;

int BinarySearch(int a[],int b,int n)
{
int left=0,right=n-1;
while(left<=right)
{
int middle=(left+right)/2;
if(middle==b)
return 1;
if(b<middle)
right=middle-1;
else
left=middle+1;
}
return -1;
}
int main()
{
int n,q;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
cin>>q;
for(int j=0;j<q;j++)
{
cin>>b[j];
}
for(int k=0;k<q;k++)//对b[]中每个数进行和a[]比较
{
if(BinarySearch(a,b[k],n))
count++;
}
cout<<count<<endl;
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐