十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
if(key==a[mid]) return mid; 这句就是罪魁祸首。呵呵你是想用return来结束while循环吧。用错了。
成都创新互联是专业的隰县网站建设公司,隰县接单;提供做网站、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行隰县网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
找到结果后,你应该是把结果输出出来,而不是用return。return语句是返回整个函数的,在你的程序里main函数就结束了,你当然看不到任何结果了。
改为:
if(key==a[mid]) break; *这行是结束while循环的。而不是你所用的return*/
}
推荐答案的 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);
}
#include stdio.h
int binfind(int val[] , int num , int value)
{
int start = 0;
int end = num - 1;
int mid = (start + end)/2;
while(val[mid] != value start end)
{
if (val[mid] value)
{
end = mid - 1;
}
else if (val[mid] value)
{
start = mid + 1;
}
mid = ( start + end )/2;
}
if (val[mid] == value)
return mid;
else
return -1;
}
int main()
{
int nums[] = {1 , 3 , 4 ,7 ,8 , 12 ,45 ,67 ,97 ,123 ,456 ,675 ,1111 , 4534 , 4563};
int result = binfind(nums , sizeof(nums) / sizeof(nums[0]) , 45);
if (result 0)
{
printf("查无此数");
}
}