1.lower_bound
- 简介:是指返回一个有序数列中第一个大于等于key的位置.如果所有元素都小于key,则返回最后一个数last
- 头文件:#include <algorithm>
- 用法:
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 int a[]={1,2,3,3,4,5}; 6 int main() 7 { 8 cout<<lower_bound(a, a+6, 3)-a<<endl; //key=3 9 system("pause"); 10 return 0; 11 }
- 运行结果:4
- 拓展:c++ STL 中的 lower_bound
1 //这个算法中,first是最终要返回的位置 2 int lower_bound(int *array, int size, int key) 3 { 4 int first = 0, middle; 5 int half, len; 6 len = size; 7 8 while(len > 0) { 9 half = len >> 1; 10 middle = first + half; 11 if(array[middle] < key) { 12 first = middle + 1; 13 len = len-half-1; //在右边子序列中查找 14 } 15 else 16 len = half; //在左边子序列(包含middle)中查找 17 } 18 return first; 19 }
2.upper_bound
- 简介:是指返回一个有序数列中第一个大于key的位置.如果所有元素都小于key,则返回最后一个数last
- 头文件:同lower_bound
- 用法:
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 int b[]={9,8,7,7,6,5}; 6 int main() 7 { 8 cout<<upper_bound(a, a+6, 3)-a<<endl; //key=3 9 system("pause"); 10 return 0; 11 }
- 运行结果:2
- 拓展:c++ STL 中的 upper_bound:
1 int upper_bound(int *array, int size, int key) 2 { 3 int first = 0, len = size-1; 4 int half, middle; 5 6 while(len > 0){ 7 half = len >> 1; 8 middle = first + half; 9 if(array[middle] > key) //中位数大于key,在包含last的左半边序列中查找。 10 len = half; 11 else{ 12 first = middle + 1; //中位数小于等于key,在右半边序列中查找。 13 len = len - half - 1; 14 } 15 } 16 return first; 17 }