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++常用算法手册》

    原文作者:查找算法
    原文地址: https://blog.csdn.net/mmmmMMMMHHHHH/article/details/80517452
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞