① 用c语言实现折半查找
#include<stdio.h>
int find(int a[],int x,int n,int m)
{int i;
if(n>m)return -1;
i=(n+m)/2;
if(a[i]==x)return i;
if(a[i]>x)return find(a,x,n,i-1);
return find(a,x,i+1,m);
}
int main()
{
袭
int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51};
int x,i;
printf("已有的数是: ");
for(i=0;i<20;i++)
printf("%d ",a[i]);
printf(" 请输入要查找的数:");
scanf("%d",&x);
if((i=find(a,x,0,19))>=0)
printf("%d是第%d个数 ",x,i+1);
else printf("未找到%d ",x);
return 0;
}
② c语言编程实现“折半查找”的过程。
//参考代码如下:
#include <stdio.h>
int main()
{
int i, j, n, k=0, isFound=0;
int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //测试数组
printf("请输出一个整数:\n");
scanf("%d", &n);
i = (int)15/2; //对折位移量
j = (int)15/2; //取数“指针”
while(k<2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(n<num[j])
j = j + (i + 1);
else if(n>num[j])
j = j - (i + 1);
else
{
isFound = 1;
break; //若找到相等数,标记已找到并退出循环
}
}
//输出结果
if(isFound)
printf("该数是数组中第%d个元素的值\n", j);
else
printf("查无此数!\n");
return 0;
}
③ C语言实现折半查找
#include<stdio.h>
intlook_up(inta[],intn,intx)
{
intleft=0,right=n-1,mid;
while(left<=right)
{
mid=(left+right)/2;
if(x==a[mid])
returnmid+1;//加一后才回是它的逻辑答位序
elseif(x<a[mid])
right=mid-1;
else
left=mid+1;
}
if(left>right)
return-1;
}
intmain()
{
inta[100],n,x,i,result;
scanf("%d",&n);
for(i=0;i<n-1;i++)
scanf("%d,",&a[i]);
scanf("%d",&a[i]);
scanf("%d",&x);
result=look_up(a,n,x);
if(result>=0)
printf("%d
",result);
else
printf("No
");
}