C程序设计语言练习 第三章

3.3 else-if语句

折半查找,这里通过一个折半查找说明三路判定程序的用法。该函数用于判定已排序好的数组v中是否存在某个特定的值。数组v的元素必须以升序排列。如果v中包含x,则该函数返回x在v中的位置(介于0~n之间的一个整数),否则,该函数返回-1。

思路:在折半查找时,首先将输入值x与数组v的中间元素进行比较。如果x小于中间元素的值,则在该函数的前半部分查找,否则,在该数组的后半部分查找。在这两种情况下,下一步都是将x与所选部分的中间元素进行比较。这个过程一直进行下去,直到找到制定的值或者查找范围为空。

int bitsearch(int x,int v[], int n)
{
    int low,high,mid;

    low = 0;
    high = n-1;

    while (low <= high) {
        mid = (low + high) / 2;
        if(x < v[mid])
            high = mid -1;
        else if(x > v[mid])
            low = mid + 1;
        else
            return mid;
    }
    return -1;
}

练习3-1

在上面有关折半查找的例子中,while循环语共执行了两次,其实只要一次就足够了(代价是将更多的测试在循环外执行)。重写该函数,使得在循环内部只执行一次。比较两者的运行时间。

对于三路判定以后或许可以这样改进。

int bitsearch2(int x,int v[], int n)
{
    int low,high,mid;
    
    low = 0;
    high = n-1;
    if( x<v[low] || x>v[high]) 
        return -1;

    mid = (low + high) / 2;
    while (low <= high && x != v[mid]) {
        if(x < v[mid])
            high = mid -1;
        else 
            low = mid + 1;
        mid = (low + high) / 2;
    }
    if(x == v[mid])
        return mid;
    else 
        return -1;
}

转载于:https://www.cnblogs.com/wjundong/p/11578336.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值