zoukankan      html  css  js  c++  java
  • 二分搜索算法

    题目描述

    给定已按升序排好序的n个元素a[0:n-1],现要在这n个元素中找出一特定元素x。

    题目分析

    二分搜索算法(折半查找法)是运用分治策略的典型例子。

    满足分治法的4个适用条件。很显然此问题分解出的子问题相互独立,即在a[i]的前面或后面查找x是独立的子问题,因此满足分治法的第四个适用条件。

    算法实现

    #include <stdio.h>
    
    int binarySearch(int a[], const int& x, int n)
    {
        int left=0, right=n-1;
        while (left <= right)
        {
            int middle = (left+right)/2;
            if (x==a[middle])
            {
                return middle;
            }
            if (x > a[middle]) 
            {
                left = middle+1;
            }
            else
            {
                right = middle-1;
            }
        }
        return -1;
    }
    
    int main()
    {
        int a[] = {1,2,5,7,8,10};
        printf("%d
    ",binarySearch(a,8,6));
        return 0;
    }
    

    复杂度分析

    每执行一次算法的while循环, 待搜索数组的大小减少一半。因此,在最坏情况下,while循环被执行了O(logn) 次。循环体内运算需要O(1) 时间,因此整个算法在最坏情况下的计算时间复杂性为O(logn) 。

  • 相关阅读:
    Fibonacci Again
    N的10000的阶乘
    HDU2141(二分搜索)
    POJ2366(HASH法)
    10106 Product
    UVA 401 Palindromes
    UVA424 Integer Inquiry
    POJ2503(二分搜索)
    mysql重置root密码
    tidb安装haproxy负载均衡
  • 原文地址:https://www.cnblogs.com/xwz0528/p/4507415.html
Copyright © 2011-2022 走看看