二分查找c++简单模板

 1 //数组a[]中有n各元素,已经按升序排序,待查找的元素x
 2 sort(a,a+n); //升序排序
 3 template<class Type>
 4 int BinarySearch(Type a[],const Type&x,int n)
 5 {
 6     int left=0; //左边界
 7     int right=n-1; //右边界
 8     while(left<=right)
 9     {
10         int middle=(left+right)/2; //中点
11         if(x==a[middle])return middle; //找到x,返回数组中的位置
12         if(x>a[middle]) left=middle+1;
13         else right=middle-1;
14     }
15     return -1; //未找到x
16 }
17 
18 
19 
20 
21 
22 #include<iostream>
23 #include<algorithm>
24 using namespace std;
25 bool compare(int a,int b)
26 {
27     return a<b;                       //升序
28 }
29 template<class Type>int BinarySearch(Type a[],const Type&x,int n)
30 {
31     int left=0;
32     int right=n-1;
33     while(left<=right)
34     {
35         int middle=(left+right)/2;
36         if(a[middle]==x) return middle;
37         if(a[middle]<x) left=middle+1;
38         else right=middle-1;
39     }
40     return -1;
41 }
42 int main()
43 {
44     int a[20];
45     int n,m;
46     cin>>n;
47     for(int i=0; i<n; i++)
48     {
49         cin>>a[i];
50     }
51     sort(a,a+n,compare);
52     for(int i=0; i<n; i++)
53     {
54         cout<<a[i]<<" ";
55     }
56     cout<<endl;
57     m=BinarySearch(a,234,n);
58     cout<<m<<endl;
59     return 0;
60 }

 

posted @ 2017-04-26 21:07  灬从此以后灬  阅读(714)  评论(0编辑  收藏  举报