zoukankan      html  css  js  c++  java
  • lower_bound和upper_bound算法

    参考:http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.html

    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

      这个序列中可能会有很多重复的元素,也可能所有的元素都相同,为了充分考虑这种边界条件,STL中的lower_bound算法总体上是采用了二分查找的方法,但是由于是查找序列中的第一个出现的值大于等于val的位置,所以算法要在二分查找的基础上做一些细微的改动。

    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)//当中间的数小于key,在右边的子序列查找
            {
                first=middle+1;
                len=len-half-1;
            }
            else len=half;//否则在左边
        }
        return first;
    }

    2. upper_bound

    upper_bound返回的是最后一个大于等于val的位置,也是有一个新元素val进来时的插入位置。

    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;
        }
        return first;
    }
  • 相关阅读:
    python学习之路(目录)--你想要的都在这里了
    计算机视觉学习之路(目录)------你想要的都在这里了
    python flask构建小程序订餐系统--centos下项目开发环境的搭建
    图像处理--图像特效
    数据库--初识数据库
    python基础-面向对象进阶
    JavaScript 模块封装
    JavaScript calss语法糖
    JavaScript 原型与继承
    JavaScript Object对象
  • 原文地址:https://www.cnblogs.com/iwantstrong/p/5986003.html
Copyright © 2011-2022 走看看