二分查找
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 }
以上是关于二分查找的主要内容,如果未能解决你的问题,请参考以下文章