• 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;
    }
    
  • 相关阅读:
    Zookeeper_ZAB协议
    Zookeeper_Paxos算法
    Eureka的表兄弟Zookeeper理论基础
    SSE:服务器推送事件
    BIO、NIO、AIO入门认识
    c语言float、double数据保留2位小数
    c语言在8位bmp位图上画一个框并另存
    C语言在24真彩位图上指定位置处画一条横线
    vs2010 opengl 环境搭建
    osg模型操作之替代节点
  • 原文地址:https://www.cnblogs.com/wjundong/p/11578336.html
Copyright © 2020-2023  润新知