二分法查随机数的第几个

来源:互联网 发布:播放exe视频软件 编辑:程序博客网 时间:2024/04/27 00:55

#include   <iostream>
#include   <cmath>
#include   <ctime>
#include "time.h"
#define  N 120
using   namespace   std;
//   使用RAND_MAX
void   main(){
 srand(time(0));
    __int64  i,a=0,b=N,c=N/2,k[N],count;
 int flag=0;
 clock_t start,finish;
 double during;
 start=clock();
 for (i=0;i<N;i++)
 {

  k[i]=(double)rand()/RAND_MAX*N;//产生0-1直接均匀的double型随机数再乘以N
 // printf("%ld ",k[i]);
 }
 finish=clock();
 during=(double)(finish-start)/CLOCKS_PER_SEC;
 printf("使用的时间为:%.2f/n",during);
 
 while(a<b)
 {
  count=0;
  for (i=0;i<N;i++)
  {
   if (k[i]<=c)
   {
    count++;
   }
   if (count==N/2)
   {
    b=c;
    c=(a+b)/2;
       break;
   }

  }
  if (count<N/2)
  {
   a=c;
   c=(a+b)/2;
   if (a+1==b)
   {
    c=b;
    break;
   }
  }
 }
 printf("第N/2个数是%ld/n",c); 
 printf("使用的时间为:%.2f/n",during);

}

原创粉丝点击