二分查找(由系统出随机数值)


 1 //用 clock() 记录查找时间记录查找时间,然后看时间的效率
 2 //随机 10000000 个数据。
 3 #include
 4 #include<string.h>
 5 #include
 6 #include
 7 //得到随机数函数
 8 void getRandom(int arr[],int arr_len){
 9     srand((int)time(NULL));//加随机种子
10     for(int i=0;i)
11     {
12         arr[i]=rand()%1000;    //NUM%100=[0-99] NUM%1001=[0-1000] 
13     }
14 }
15  
16 //排序函数
17 void sort(int arr[],int arr_len)
18 {
19     for(int i=0;i)
20     {
21         for(int j=0;j1;j++)
22         {
23             if(arr[j]>arr[j+1])
24             {
25                 int temp=arr[j];
26                 arr[j]=arr[j+1];
27                 arr[j+1]=temp;
28             }
29         }
30     }
31 }
32  
33 //二分查找函数
34 int BinarrySearch(int arr[],int arr_len,int find_x)
35 {
36     int left=0;
37     int right=arr_len-1;
38     int mid;
39     while(left<=right)
40     {
41         mid=(left+right)/2;
42         if(mid[arr]==find_x)
43         {
44             return mid;//查找成功返回下标
45         }
46         if(arr[mid]//调整左边界
47             left=mid+1;
48         }
49         if(arr[mid]>find_x){//调整右边界
50             right=mid-1;
51         }
52         
53     }
54     return -1; //否则返回-1 表示不成功
55 }
56 }
57  
58 int main(){
59     clock_t start,stop;
60     double duration;
61     int arr_len;
62     int arr[10000];
63     printf("请输入数组大小:");
64     scanf("%d",&arr_len);
65     getRandom(arr,arr_len);//随机种子得到 arr_len 个数
66     sort(arr,arr_len); //简单排序
67     for(int i=0;i){
68         printf("%4d",arr[i]);
69     }
70     printf("\n");
71     int find_x;
72     printf("请输入你要查的数:");
73     scanf("%d",&find_x);
74     start =clock();
75     int find_ans=BinarrySearch(arr,arr_len,find_x);
76     if(find_ans==-1)
77         printf("查找失败。\n");
78     else
79         printf("查找成功,该值位于第%d个\n",find_ans+1);
80     stop=clock();
81     duration=((double)(stop-start))/CLK_TCK;
82     printf("%lf秒",duration);
83     return 0;
84 }