• STL 二分查找 upper_bound和lower_bound用法


    STL中关于二分查找的函数有三个lower_bound 、upper_bound 、binary_search 。
    这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数。

    ForwardIter lower_bound(ForwardIter first, ForwardIter last,const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于等于值val的位置。

    ForwardIter upper_bound(ForwardIter first, ForwardIter last, const _Tp& val)算法返回一个非递减序列[first, last)中的第一个大于值val的位置。

    lower_bound和upper_bound如下图所示:
    这里写图片描述

    1.lower_bound函数源代码:

    int lower_bound(int *array,int size,int key)
    {
        int first=0,middle;
        int half,len;
        len=size;
        while(len>0)
        {
            half=len>>1;
            middle=first+half;
            if(array[middle]<key)
            {
                first=middle+1;
                len=len-half-1;///在右边子序列中查找
            }
            else
                len=half;///在左边子序列(包含middle)中查找
        }
        return first;
    }

    2.upper_bound函数源代码:

    int upper_bound(int *array,int size,int key)
    {
        int len=size-1;
        int half,middle;
        while(len>0)
        {
            half=lem>>1;
            middle=first+half;
            if(array[middle]>key)///中位数大于key,在包含last的左半边序列中查找。
                len=half;
            else
            {
                first=middle+1;///中位数小于等于key,在右半边序列中查找。
                len=len-half-1;
            }
        }
        retrurn first;
    }
  • 相关阅读:
    Java测试用例简介
    Hive使用入门
    Java中的GetOpt操作
    Tomcat的文件列表服务
    Hadoop MapReduce 初步学习总结
    hadoop集群调优-OS和文件系统部分
    02怎么学数据结构?
    01为什么学习数据结构?
    MySQL实战06の锁
    MySQL实战05の索引(下)
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7899991.html
Copyright © 2020-2023  润新知