二分查找

二分查找又称折半查找。

使用二分查找的前提:线性表中的记录必须是关键码有序,线性表必须采用顺序存储。

二分查找的思想是:在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;

                              若给定的值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定的值大于中间

                              记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所

                              有查找区域无记录,查找失败为止。


直接说思想可能有点抽象,就举个简单的例子来说明吧。比如给定一个有序数组 a[10],其值从 a[0] 到 a[9] 分别

为 0 到 9 ,比如我们要在其中查找 1,那么根据二分查找思想,先取中间值,即下标为 (0+9)/2=4的值,a[4] = 4,

显然 1 < 4,所有我们要从 4 的左半区继续查找,即从 a[0] 到 a[3] 这段区域查找,这段区域的中间值下标为 1,而

a[1] = 1,所以这样我们便找到了我们要找的值,这样返回相应的下标即可。对于给定值大于中间记录的关键字的和

上面的过程是一样的,这就不多讲了。

二分查找的代码如下:


int Binary_Search(int *a,int n,int key)
{
        int low = 0;
        int high = n - 1;
        int middle;
        while (low <= high)
        {
                middle = (low + high) / 2;
                if (key < a[middle])
                        high = middle - 1;
                else if (key > a[middle])
                        low = middle + 1;
                else
                        return middle;
        }
        return -1;
}

参数说明:a为要查找的区域,n为区域的总长度,key为要查找的值

返回值:若查找成功,则返回值所在区域里的下标,若查找失败,则返回-1。(下标从0开始)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值