• 二分查找(折半查找)


    二分查找

    二分查找也叫折半查找。要求这个序列是有序序列。

    二分查找的时间复杂度为O(logn),比顺序查找要快一些,比具体步骤如下:

    1:找到序列的中点,比较目标数与序列中点对应的数的大小。

    2:目标数大于序列中点对应的数,序列的起点变为原序列的中点加1一;

    目标数小于序列中点对应的数,序列的终点变为原序列的中点减一。

    目标数等于序列中点对应的数,返回该数在序列中对应的下标。

    3:重复步骤1,2直到找到目标数或者该序列中没有该数时结束。

    int BinSearch(int R,int K)//R为有序表,k为要查找的目标数 
    {
    //在有序表R[1..n]中进行二分查找,成功时返回结点的位置,失败时返回零
        int low=1;
        int high=n;
        int mid;    
        //置当前查找区间上、下界的初值
        while(low<=high)   
        //当前查找区间R[low..high]非空
        {
            mid=(low+high)/2if(R[mid]==K)
                return mid;
                //查找成功返回
            if(R[mid]>K)
               high=mid-1;
               //继续在R[low..mid-1]中查找
            else
               low=mid+1//继续在R[mid+1..high]中查找
        }
       return 0;
       //当low>high时表示查找区间为空,查找失败
    }

    如果该序列无序,可用sort函数进行快排。二分查找比顺序查找要快,但是也是有缺点的,

    就是二分查找需要将序列排序,序列如果是无序的那么就需要将序列排序,而排序本身就

    是比较费时,即使用高效率的排序算法也要花费O(nlogn)的时间。

     

    所以我们要采用二分查找时我们就要考虑这个序列是否是经常改动,

    如果这个序列的不能保持有序性,那么二分查找就不再适用。

  • 相关阅读:
    判断
    数的读写
    单词长度
    c语言字符串大小写字母转换
    URL超长问题
    使用Loadrunner录制手机端http请求
    NoSql 数据库理解
    .NET, ASP.NET, ADO.NET, C# 区别
    Browser 对象
    装箱与拆箱
  • 原文地址:https://www.cnblogs.com/zhoubo123/p/11302236.html
Copyright © 2020-2023  润新知