重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
二分查找是一种简单高效的查找算法。其思想在生活中广泛应用,比如从图书馆书架上查找书,查字典,测量领域中热电偶温度补偿等。
在峨眉山等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、网站建设、外贸网站建设 网站设计制作按需策划,公司网站建设,企业网站建设,品牌网站设计,全网营销推广,成都外贸网站建设,峨眉山网站建设费用合理。
二分查找可以用 循环 和 递归 两种方式实现
#include stdio.h//不用math头文件
void main()
{int high = 9,low = 0,m,k,a[10]={1,2,3,4,5,6,7,8,9,10};//hing和low赋初值
scanf("%d",k);
while (high=low)//=
{
m=(high+low)/2;
if(ka[m]) high=m-1;//比较的是数值而不是下标
else if(ka[m]) low=m+1;
else
{
printf("yes");
return;//这两句地方放错了
}
}
printf("no");
return;//if语句去掉
}
#includestdio.h
int main()
{
int i,j,k,n,m;
int a[105];
scanf("%d",n);
for(i=0;in;i++)
scanf("%d",a[i]);
scanf("%d",m);
int left=0;right=n-1;
while(right=left)
{
mid=(left+right)/2;
if(a[mid]==m)
{
printf("%d\n",mid);
break;
}
else if(a[mid]m)
right=mid-1;
else
left=mid+1;
}
if(leftright)
printf("null\n");
return 0;
}
推荐答案的 code 有问题,并没有考虑到若待查数的下标是 0 怎么办?所以若顺序表中不存在待查元素 应该 return -1
加上主函数的最后两行调用两次查找函数很多余,代码显得不够简练。
建议改成:
#include stdio.h
#include stdlib.h
int Search(int *a, int key)
{
// 在顺序表中折半查找 key的数据元素。若找到,则函数值为
int low = 0, mid; // 该元素的数组下标;否则为0。
int high = 14;
while (low = high)
{
mid = (low + high) / 2;
if (key == a[mid])
return mid; // 找到待查元素
else if (key a[mid])
high = mid - 1; // 继续在前半区间进行查找
else
low = mid + 1; // 继续在后半区间进行查找
}
return -1; // 顺序表中不存在待查元素
}
void main()
{
int *a, key, i;
int b[15] = {0};
a = b;
printf("请自小到大输入15个整数:\n");
for (i = 1; i = 15; i++)
{
scanf("%d", b[i - 1]);
printf("\n");
}
printf("请输入你要查找的数:\n");
scanf("%d", key);
i = Search(a, key);
if (-1 == i)
printf("你要查找的数不在目标数组中!\n");
else
printf("你要查找的数的数组下标为 %d \n", i);
}