码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2016-09-02 20:35:13      阅读:105      评论:0      收藏:0      [点我收藏+]

标签:

通过展示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 }

 

二分查找

标签:

原文地址:http://www.cnblogs.com/cyb123456/p/5835496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!