二分查找

Posted Yan_Bin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找相关的知识,希望对你有一定的参考价值。

通过展示STL中已存在的lowerbound和uppebound函数来展示二分查找。

 1 #include <cstdio>
 2 // A是一个递增数列,v存在时返回它出现的第一个位置,否则返回下标i:在此处插入v不破环数列的升序
 3 // 返回值是x,x+1,x+2,...,y-1,y。返回y表示v > A[y - 1]
 4 int My_lower_bound(int* A,int x,int y,int v){
 5     int m;
 6     while(x < y){
 7         m = x + (y - x) / 2;
 8         if(A[m] >= v) y = m;
 9         else x = m + 1;
10     }
11     return x;
12 }
13 // A是一个递增数列,v存在时返回它出现的最后一个位置的后面一个位置,否则返回下标i:此处插入v后数列仍然有序
14 int My_upper_bound(int* A,int x,int y,int v){
15     int m;
16     while(x < y){
17         m = x + (y - x) / 2;
18         if(A[m] <= v) x = m + 1;
19         else y = m;
20     }
21     return x;
22 }
23 int main(){
24     int A[] = {1,2,3,3,4,4,5,5,5,6,6,6,6,7,8,9,10,11,12}; // 19个元素
25     printf("%d\n",My_lower_bound(A,0,19,4));
26     printf("%d\n",My_upper_bound(A,0,19,4));
27     printf("%d\n",My_lower_bound(A,0,19,5));
28     printf("%d\n",My_upper_bound(A,0,19,5));
29     printf("%d\n",My_lower_bound(A,0,19,6));
30     printf("%d\n",My_upper_bound(A,0,19,6));
31     printf("%d\n",My_lower_bound(A,0,19,12));
32     printf("%d\n",My_upper_bound(A,0,19,12));
33     printf("%d\n",My_lower_bound(A,0,19,15));
34     return 0;
35 }

 

以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章

java 二分查找法

代码题(12)— 二分查找

二分查找代码

PHP实现二分查找算法(代码详解)

「算法笔记」一文摸秃二分查找

C语言二分查找