第一版没有考虑有相同的。以后在该。
#include <iostream>
#include <vector>
#include <stdio.h>
using namespace std;
int binary(vector<int> p ,int searchNum);//二分查找算法
vector<int> sort(vector<int> p,int n);//冒泡排序算法
int Num;//需要生成的vector数量
int searchNum;//需要查询的数字
int main()
{
cout<<"enter array lenth: ";
cin>>Num;cin.get();
vector<int> vec(Num);
srandom(clock());
for(int i=0;i<Num;i++)
{
vec[i]= random()%(Num*100);
cout<<vec[i]<<" ";
}
cout<<"enter the number you want search : ";
cin>>searchNum;cin.get();
vec=sort(vec,Num);
for(int i =0;i<Num;i++)cout<<vec[i]<<" ";
cout<<"sort finished! "<<endl;
Num=binary(vec,searchNum);
if(Num!=-1)cout<<"the num is: "<<Num<<" and it's "<<vec[Num]<<endl;
cout<<Num;
return 0;
}
vector<int> sort(vector<int> p,int n){//冒泡对向量排序
int temp;
for(int i=0;i<n-1;i++ ){
for(int j=i+1;j<n;j++){
if(p[i]>p[j]){
temp=p[i];p[i]=p[j];p[j]=temp;
}
}
}return p;
}
int binary(vector<int> p,int searchNum ){
short begin=0,end=Num-1,mid=(begin+end)/2;
while(begin<=end){
mid=(begin+end)/2;
if(searchNum==p[mid]) return mid;
else if(searchNum<p[mid]) end=mid-1;
else begin=mid+1;
}return -1;
}
第二版
转载:https://www.cnblogs.com/kyoner/p/11080078.html 讲的很详细。
#include <iostream>
2 #include <random>
3 #include <ctime>
4 #include <vector>
5 using namespace std;
6 int Num,searchNum;
7 int left_search(vector<int> p,int sNum);
8 int right_search(vector<int> p,int sNum);
9 vector<int> sort(vector<int> p,int n);
10 int main()
11 {
12 cout<<"enter the number of array you want to creat: ";
13 cin>>Num;cin.get();
14 cout<<"enter the number you want to search: ";
15 cin>>searchNum;cin.get();
16 vector<int> vc(Num);
17 cout<<vc.size()<<" "<<vc.capacity()<<" "<<vc.size()/(sizeof(int))<<end
18 default_random_engine e;
19 e.seed((unsigned int)time(NULL));
20 for(int i=0;i<Num;i++){ //给vc赋值
21 vc[i]=e()%Num;//[0,Num)
22 }
23
24 vc = sort(vc,Num);//排序
25 for(int q:vc){
26 cout<<q<<" ";
27 }
28 cout<<endl;
29 cout<<"左边界为: "<<left_search(vc,searchNum)<<endl;
30 cout<<"右边界为: "<<right_search(vc,searchNum)<<endl;
31 return 0;
32 }
33
34
35 vector<int> sort(vector<int> p,int n){
36 int temp;
37 for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++){
39 if(p[i]>p[j]){
40 temp=p[i];p[i]=p[j];p[j]=temp;
41 }
42 }return p;
43 }
44
45
46 int left_search(vector<int> p,int sNum){
47 int begin=0,end=p.size(),mid=(begin+end)/2;
48 if(sNum==0)return -1;
49 while(begin<end){
50 if(sNum==p[mid])end=mid;//需要注意
51 else if (p[mid]>sNum)end=mid;
52 else begin=mid+1;
53 mid=(begin+end)/2;
54 }return p[begin]==sNum ? begin:-1;
55 }
56
57
58 int right_search(vector<int> p,int sNum){
59 int begin=0,end=p.size(),mid=(begin+end)/2;
60 if(sNum==0)return -1;
61 while(begin<end){
62 if(sNum==p[mid])begin=mid+1;//需要注意
63 else if (p[mid]>sNum)end=mid;
64 else begin=mid+1;
65 mid=(begin+end)/2;
66 }return p[begin-1]==sNum ? begin-1:-1;//需要注意
67 }