标签:
二分查找原理很简单 , 大家高中的时候 就学过 就不多说了 下面附上 二分的代码
1 int erfen(int num,int len) // 在 已经确定的 数列里面 2 { 3 int left,right,mid; // 找到 要么可以替换的 数字要么 向后推一位 4 left=1; 5 right=len; 6 mid=(left+right)/2; 7 while(left<=right) 8 { 9 if(d[mid]<num) 10 left=mid+1; 11 else if(d[mid]>num) 12 right=mid-1; 13 else 14 return mid; 15 mid=(left+right)/2; 16 } 17 return left; 18 }
1 #include<stdio.h> 2 #include<string.h> 3 #include<math.h> 4 #include<iostream> 5 #include<algorithm> 6 #include<queue> 7 #include<vector> 8 #include<set> 9 #include<stack> 10 #include<string> 11 #include<sstream> 12 #include<map> 13 #include<cctype> 14 using namespace std; // 二分查找 , 效率挺高的 , 下面是 stl 中 二分查找的 代码 15 int main() 16 { 17 int a[10]; 18 for(int i=0;i<10;i++) 19 a[i]=2*i; 20 int n; 21 sort(a,a+10); 22 int location; 23 while(scanf("%d",&n)) 24 { 25 location=lower_bound(a,a+10,n)-a; // 如果 location 是 指针的话 返回的 就是 值 , 如果不是指针的话 返回的就是 位置 26 printf("%d\n",location); 27 } 28 return 0; 29 }
fa
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set> #include<stack> #include<string> #include<sstream> #include<map> #include<cctype> using namespace std; int main() { int a[10]; for(int i=0;i<10;i++) a[i]=2*i; int n; sort(a,a+10); int *location; while(scanf("%d",&n)) { location=lower_bound(a,a+10,n); // 缺点是 , 如果查找的数字 过大的话 返回的是 那个比较大的数字 . printf("%d\n",*location); } return 0; }
#include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #include<queue> #include<vector> #include<set> #include<stack> #include<string> #include<sstream> #include<map> #include<cctype> using namespace std; int main() { int a[10]; for(int i=0;i<10;i++) a[i]=5; int n; sort(a,a+10); int location; while(scanf("%d",&n)) { location=upper_bound(a,a+10,n)-a; // 缺点是 , 如果查找的数字 过大的话 返回的是 那个比较大的数字 . printf("%d\n",location); } return 0; }
标签:
原文地址:http://www.cnblogs.com/A-FM/p/5426730.html