###### tags: Basic - [x] check # d732: 二分搜尋法 :::info 在遊戲中玩家可以自由加入公會組成同盟, 已知現在有一個公會由 N 個成員組成( 1 ≤ N ≤ 500,000 ), N 個成員的玩家編號由小到大分別為 x0, x1, ..., xN-1 ( 1 ≤ xi ≤ 1,000,000,000 )。 現在有 Q 個玩家( 1 ≤ Q ≤ 1,000,000,000 ), 請利用二分搜尋法快速確認,這 Q 個玩家是否是公會成員。 ::: ```c= #include<stdio.h> #include<stdlib.h> int BinarySearch(int*,int,int,int); int main(){ int int_length,int_quer; int start=0,i; scanf("%d%d",&int_length,&int_quer); int *ptr=(int*)malloc(sizeof(int)*(int_length));//declare a pointer for(i=0;i<=int_length-1;i++){//用一個回圈把資料讀入 scanf("%d",&ptr[i]); } for(i=1;i<=int_quer;i++){//查詢幾次用一個回圈控制 printf("%d",BinarySearch(ptr,start,int_length,int_quer));//做二元搜尋(剛宣告陣列的指標,起始,終止,查詢值) } } //採遞回方式 int BinarySearch(int*ptr,int start,int int_length,int int_quer){ int min=(start+(int_length-1))/2; if(int_quer==min){ return ptr[min]; } else if(int_quer<min){ return BinarySearch(ptr,start,min-1,int_quer); } else if(int_quer>min){ return BinarySearch(ptr,min+1,int_length,int_quer); } } ```