• 分治算法二:二分查找


    一、算法说明

    (1)检测有序序列的中间值与指定元素是否相等,若相等则返回对应下标;
    (2)若有序序列的中间元素大于指定元素,则将该问题分解成在左半部分查找指定元素,进行递归处理;
    (3)若有序序列的中间元素小于指定元素,则将该问题分解成在右半部分查找指定元素,进行递归处理;
    (4)递归出口条件有两种:找到指定元素,返回下标;入参的下标相等,表明无法找到指定元素

    二、代码实现

    /*
     * description: 在有序序列中,查找指定元素的下标,若存在则给出第一个这样元素的下标,否则输出不存在
     * input: 有序序列指针array,序列起始下标p,序列终止下标r,指定元素key
     * outut: 指定元素下标,或者-1(未找到)
     */
    int binarySearch(int *array, int p, int r, int key)
    {
        int middle = (p + r) / 2;
        // 递归出口
        if (p > r) {
            return -1;
        }
        if (array[middle] == key) {
            return middle;
        }
        // 递归过程
        if (array[middle] > key) {
            // key 在左侧
            binarySearch(array, p, middle - 1, key);
        } else {
            // key 在右侧
            binarySearch(array, middle + 1, r, key);
        }
    }
    
    

    三、测试结果

    测试代码:

    int main(void)
    {
        int array[ARRAY_SIZE] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
        int ret = -1;
        int key = 11;
        ret = binarySearch(array, 0, ARRAY_SIZE - 1, key);
        if (ret < 0) {
            printf("can not search the key[%d].
    ", key);
            while(1);
            return 0;
        }
        printf("binarySearch result: the key[%d] position is [%d] = %d
    ", key, ret);
        while (1);
        return 0;
    }
    
    

    测试结果:

  • 相关阅读:
    Centos7下搭建SVN
    Ubuntu设置telnet 远程登录(root权限)
    E: 无法打开锁文件 /var/lib/dpkg/lock-frontend
    使用ICMP搭建隧道(PingTunnel)
    Centos7安装Redis
    idea 激活方法
    Chrome 浏览器安装 ChroPath 插件
    jmeter引入外部jar包的方法
    maven安装
    eclipse集成 json editor plugin插件
  • 原文地址:https://www.cnblogs.com/HZL2017/p/14333134.html
Copyright © 2020-2023  润新知