zoukankan      html  css  js  c++  java
  • 二分查找(折半查找)

    二分查找

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

    二分查找的时间复杂度为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)的时间。

     

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

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

  • 相关阅读:
    第十三周
    意见评论
    第十二周
    冲刺10
    冲刺9
    冲刺8
    团队冲刺第二十二天-KeepRunningAPP
    找水王
    第十四周总结
    搜狗输入法评价
  • 原文地址:https://www.cnblogs.com/zhoubo123/p/11302236.html
Copyright © 2011-2022 走看看