c++生成随机数并二分查找

 第一版没有考虑有相同的。以后在该。

#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 }                        

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值