用C语言写二分查找的代码!!!

先预设值一段数组,再输入一个数,用二分查找法找到这个数再数组中的位置!并输出位置!... 先预设值一段数组,再输入一个数,用二分查找法找到这个数再数组中的位置!并输出位置! 展开
 我来答
飞雪鸣鹤
2019-06-27 · TA获得超过237个赞
知道答主
回答量:17
采纳率:0%
帮助的人:14.8万
展开全部

推荐答案的 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);
}
li88owert
推荐于2017-11-23 · 超过26用户采纳过TA的回答
知道答主
回答量:118
采纳率:0%
帮助的人:63.9万
展开全部
给你个例子参考下,不是很难的::
一个数组包含15个整数元素,已经从小到大排好序,要求输入一个数用折半查找法查找它在数组中的序号,我不知道怎么实现这个“折半查找法”。。。

#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 0; //顺序表中不存在待查元素
}
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);

if(!Search(a,key)) printf("你要查找的数不在目标数组中!\n");
else printf("你要查找的数的数组下标为 %d \n",Search(a,key));
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式