fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int Msort(int *arr, int len);
  5. int BinarySearch(int *arr, int size, int findData);
  6.  
  7. int main(){
  8. int i;
  9. int n, m;
  10. scanf("%d", &n);
  11. int *arr;
  12. arr = (int *)malloc(n*sizeof(int)); // 동적할당
  13. for(i = 0; i < n; i++){
  14. scanf("%d", &arr[i]);
  15. }
  16. Msort(arr, sizeof(arr));
  17. scanf("%d", &m);
  18. int *Farr;
  19. Farr = (int *)malloc(m*sizeof(int)); // 동적할당
  20. for(i = 0; i < m; i++){
  21. scanf("%d", &Farr[i]);
  22. printf("%d\n", BinarySearch(arr, sizeof(arr), Farr[i]));
  23. }
  24. }
  25.  
  26. int Msort(int *arr, int len){
  27. if(len < 2) return 0;
  28.  
  29. int mid = len / 2;
  30. Msort(arr, mid);
  31. Msort(arr + mid, len - mid);
  32. int *buf;
  33. buf = (int *)malloc(sizeof(int)*len);
  34. int i = 0;
  35. int j = mid;
  36. int k = 0;
  37. while(i < mid && j < len)
  38. buf[k++] = (arr[i] < arr[j]) ? arr[i++] : arr[j++];
  39. while(i < mid)
  40. buf[k++] = arr[i++];
  41. while(j < len)
  42. buf[k++] = arr[j++];
  43.  
  44. for(i = 0; i < len; i++){
  45. arr[i] = buf[i];
  46. }
  47. }
  48.  
  49. int BinarySearch(int *arr, int size, int findData){
  50. int mid;
  51. int left = 0;
  52. int right = size - 1; // 배열 마지막 값을 가진 index는 size - 1 이다.
  53. while(left <= right){
  54. mid = (left + right) / 2;
  55. if(findData < arr[mid]) right = mid - 1;
  56. else if(findData > arr[mid]) left = mid + 1;
  57. else return 1;
  58. }
  59. return 0;
  60. }
Success #stdin #stdout 0s 4472KB
stdin
2
1 2
1
0
stdout
1