zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    【学】SoapExtension 学习
    【原】SQL ROW_NUMBER() OVER
    java线程(四)
    java线程(三)
    java线程(二)
    java线程(一)
    编写自己的一个简单的web容器(二)
    编写自己的一个简单的web容器(一)
    java网络编程基础
    spring 数据校验之Hibernate validation
  • 原文地址:https://www.cnblogs.com/nanfenggu/p/7899991.html
Copyright © 2011-2022 走看看