二分查詢(由系統出隨機數值)
阿新 • • 發佈:2021-12-02
1 //用 clock() 記錄查詢時間記錄查詢時間,然後看時間的效率 2 //隨機 10000000 個數據。 3 #include<stdio.h> 4 #include<string.h> 5 #include<stdlib.h> 6 #include<time.h> 7 //得到隨機數函式 8 void getRandom(int arr[],int arr_len){ 9 srand((int)time(NULL));//加隨機種子 10 for(int i=0;i<arr_len;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<arr_len;i++) 20 { 21 for(int j=0;j<arr_len-1;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]<find_x){//調整左邊界 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<arr_len;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 }