设计一个算法,实现折半查找,很简单的问题。在这里列举下递归和非递归
递归实现
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <stack>
#include <algorithm>
#include <queue>
using namespace std;
int n,a[105];
int Search_Bin(int stat,int end,int tmp)
{
int i,j;
if(stat>end)
return -1;
if(stat==end)
{
return stat;
}
if(tmp==a[(stat+end)/2])
{
return (stat+end)/2;
}
if(tmp>a[(stat+end)/2])
{
return Search_Bin((stat+end)/2+1,end,tmp);
}
else if (tmp<a[(stat+end)/2])
{
return Search_Bin(stat,(stat+end)/2-1,tmp);
}
}
int main()
{
int i,j,tmp;
printf("请输入你要随机产生的数的个数\n");
scanf("%d",&n);
srand(time(0));
for(i=0;i<n;i++)
{
a[i]=rand()%1000;
}
sort(a,a+n);
printf("随机产生的数排序后的answer是\n");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("请输入你要查找的数\n");
scanf("%d",&tmp);
printf("该数所在的位置是%d个\n",Search_Bin(0,n-1,tmp)+1);
return 0;
}
非递归实现
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <stack>
#include <algorithm>
#include <queue>
using namespace std;
int n,a[105];
int Search_Bin(int stat,int end,int tmp)
{
int i,j;
printf("该数所在的位置是");
while(stat<=end)
{
if(stat==end)
{
printf("%d\n",stat+1);
break;
}
if(tmp==a[(stat+end)/2])
{
printf("%d\n",stat+1);
break;
}
if(tmp>a[(stat+end)/2])
stat=(stat+end)/2+1;
else if(tmp<a[(stat+end)/2])
end=(stat+end)/2-1;
}
}
int main()
{
int i,j,tmp;
printf("请输入你要随机产生的数的个数\n");
scanf("%d",&n);
srand(time(0));
for(i=0;i<n;i++)
{
a[i]=rand()%1000;
}
sort(a,a+n);
printf("随机产生的数排序后的answer是\n");
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("\n");
printf("请输入你要查找的数\n");
scanf("%d",&tmp);
Search_Bin(0,n-1,tmp)+1;
//printf("该数所在的位置是%d个\n",Search_Bin(0,n-1,tmp)+1);
return 0;
}