设计一个算法,实现折半查找,很简单的问题。在这里列举下递归和非递归
递归实现
#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;
}#