zoukankan      html  css  js  c++  java
  • 二分查找法

      书上习题有要求用递归和迭代实现一个二分查找算法,随即写了一个。

      迭代法:

    #include<stdio.h>
    
    int binarySearch(int nums[], int left, int right, int X)
    {
        int mid;
    
        mid = (left + right) / 2;
        while(X != nums[mid])
        {
            if(X > mid)
                mid = (mid + right) / 2;
            else
                mid = (left + mid) / 2;
        }
    
        return nums[mid];
    }
    
    void main()
    {
        int arr[] = {1, 2, 3, 4, 5, 6}, arrSize;
        int X;
    
        arrSize = sizeof(arr)/sizeof(int);
        scanf("%d", &X);
        printf("%d
    ", binarySearch(arr, 0, arrSize, X));
    }

      递归法:

    #include<stdio.h>
    
    int BinarySearch(int nums[], int numsFirst, int numsSize, int X)
    {
        int numsMid;
    
        numsMid = (numsFirst + numsSize)/2;
        if(X < nums[numsMid])
            return BinarySearch(nums, numsFirst, numsMid, X);
        else if(X > nums[numsMid])
            return BinarySearch(nums, numsMid, numsSize, X);
        else
            return nums[numsMid];
    }
    
    void main()
    {
        int num[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int numsSize;
    
        numsSize = sizeof(num)/sizeof(int);
        
        printf("%d
    ", BinarySearch(num, 0, numsSize, 7));
    }

      因为二分查找算法思想就像一颗完全二叉树,深度 $ depth = lg(n+1) $ ,n为问题规模,递归子问题为2,因此以上两段代码的时间复杂度都为 $ O(lgn) $ 。

  • 相关阅读:
    SVG 2D入门11
    SVG 2D入门13
    jetty
    jquery 跨域访问问题 转
    js 读取 地址栏参数 转
    油猴 greasemonkey 背景音乐 火狐 chrome 背景音乐
    火狐 about:config
    js javascript 模拟点击 超级链接点击 转
    PostgreSQL的时间/日期函数使用 转
    update 多表
  • 原文地址:https://www.cnblogs.com/darkchii/p/7493801.html
Copyright © 2011-2022 走看看