c语言实现折半查找算法(二分查找)

c语言实现折半查找算法(二分查找)

    实验课上一个题目题目要求使用折半查找算法查找数据,结果一番折腾也没能够实现。下来查了一些资料,第一次写博客就实现一下这个未完成的算法。
    折半查找要求数据序列呈现线性结构,也就是经过排序的,假设数据已排序。
    算法的操作步骤:
    首先需要设3个变量lownum,midnum,highnum,分别保存数组元素的开始,中间和末尾的序号。假定有10个元素,开始时令lownum=0,highnum=9,midnum=(lownum+highnum)/2=4。接着进行以下判断:
    (1)如果序号为midnum的数组元素的值与x相等,表示查找到了数据,返回该序号midnum。
    (2)否则如果x<a[midnum],表示要查找的数据x位于lownum与midnum-1序号之间,不需要再去查找midnum与highnum序号之间的元素。因此,将highnum变量的值改为midnum-1,重新查找lownum与midnum-1(即highnum的新值)之间的数据。
    (3)如果x>a[midnum],表示要查找的数据x位于midnum+1与highnum序号之间,不需要再去查找lownum与midnum序号之间的元素。因此,将lownum变量的值改为midnum-1,重新查找midnum-1(即lownum变量的新值)与highnum之间的数据。     (4)逐步循环,如果lownum>highnum时还未找到目标数据x,则表示数据中无此数据。

    示例代码:
int search(int a[],int n,int x) //折半查找{ //输入参数a为数据序列数组,n为数组的长度,x为待查找的数据
    int mid,low,high;
    low=0;
    high=n-1;
    while(low<=high)
    {
        mid=(low+high)/2;
        if(a[mid]==x) //查找到 return mid; //返回
        else if(a[mid]>x)
            high=mid-1;
        else
            low=mid+1;
}
return -1; //未查找到
}
 

内容参考来自《c/c++常用算法手册》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值