zoukankan      html  css  js  c++  java
  • 【C++】递归之二分查找

    简单查找的时间复杂度为O(n)

    二分查找的时间复杂度为O(logn)

    用递归实现二分查找:

      基线条件:数组只包含一个元素。如果如果要查找的值与这个元素相同,就找到了;否则说明不在数组中。

      递归条件:把数组分成两半,将其中一半丢弃,并对另一半执行二分查找。

    C++代码实现如下(VS可以直接运行):

    #include <iostream>
    
    using namespace std;
    
    //x为目标数据、left为数组第一个元素下标、right为数组最后一个元素下标
    int recurBinarySearch(int* p, int x, int left, int right);
    
    int main()
    {
        int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        int x = 7;
        int result;
        result = recurBinarySearch(array, x, 0, 9);
        if (result == -1)
            cout << "没找到" << endl;
        else
            cout << "在array[" << result << "]里找到" << x << endl;
    }
    
    int recurBinarySearch(int* p, int x, int left, int right)
    {
        //基线条件
        if (left == right)
            return left;
    
        //递归条件
        if (left < right)
        {
            int mid = (left + right) / 2;  //得到中间值
            if (x < p[mid])  //小于,改变right
                return recurBinarySearch(p, x, left, mid - 1);
            else if (x > p[mid])  //大于,改变left
                return recurBinarySearch(p, x, mid + 1, right);
            else
                return mid;  //得到x
        }
        return -1;
    }
  • 相关阅读:
    5、垂直拆分---分库--mycat
    4、读写分离---双主双从(mycat)
    3、读写分离---一主一从(mycat)
    2、安装启动(Mycat)
    1、入门(Mycat)
    Nginx 相关参数记录(2)
    Nginx 相关参数记录(1)
    Linux
    一大波学习内容!
    开源镜像站
  • 原文地址:https://www.cnblogs.com/masbay/p/14016568.html
Copyright © 2011-2022 走看看