题目描述:
输入n(n<100)个有序正数,请用折半查找算法,查找x在其中的位置。 例如, 输入: 5 1,2,3,4,5 2 输出: 2 测试集合中,x数一定在正数数组中。即不用处理错误逻辑。
参考代码:
#include <stdio.h>
int main()
{
int n,b[108],aim,i,j;
scanf("%d",&n);
j=n/2;
for(i=1;i<=n;i++)
{
scanf("%d",&b[i]);
getchar();
}
scanf("%d",&aim);
while(b[j]!=aim)
{
if(b[j]>=aim)
{
j/=2;
}
else
{
j=(n+j)/2+1;
}
}
printf("%d\n",j);
return 0;
}
讲解:
折半查找,也叫二分查找,顾名思义,每次将数列平分,通过比较目标值与中间值的大小,而确定目标值在左半还是右半。反复如此,直到目标值与中间值相等。这么做的前提是数列有序。
求实求真,大气大为。