手写lower_bound与upper_bound

chen_zhe 沙雕 2020-11-14 11:56:56 2020-11-14 11:58:25 0

众所周知STL常数起飞(

lower_bound与upper_bound尤其如此(

没事手写了个二分查找,功能用法返回值和STL一毛一样(只是不能传函数,如果是对自己的结构体排序要定义小于运算符QAQ)

然后测试了一下对 排序,STL耗时是我的5倍???

不是STL加了很多优化的吗

#include <cstdio>

namespace Template {
	template<class T> inline T* lower_bound(T* First, T* Last, T val) {
		T * L(First), * R(Last - 1);
		while (L < R) {
			T * mid(L + (R - L >> 1));
			if (* mid < val) R = mid;
			else L = mid + 1;
		}
		return !((* L) < val) ? L : Last;
	}
	
	template<class T> inline T* upper_bound(T* First, T* Last, T val) {
		T * L(First), * R(Last - 1);
		while (L < R) {
			T * mid(L + (R - L >> 1));
			if (val < * mid) R = mid;
			else L = mid + 1;
		}
		return val < (*L) ? L : Last;
	}
}
{{ vote && vote.total.up }}

共 3 条回复

root 站长

棒!

chen_zhe 沙雕

不是位置,是指向它的指针

pikahuan 逗比

我来给大家科普科普

lower_bound:找到第一个不小于改数的数的位置

upper_bound: 找到第一个大于该数的数的位置

但是没有不大于的函数,如果能不用不大于就不用不大于,要不大于才二分!!