fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. //この関数を実装する
  5. int binary_search(int a[],int n,int x){
  6. //この関数の内側だけを書く
  7. int lef,rig,mid;
  8. lef=a[0];
  9. rig=a[n-1];
  10. mid=(lef+rig)/2;
  11. for(int i=0;i<n;i++){
  12. if(x>mid){
  13. lef=mid+1;
  14. mid=(lef+rig)/2;
  15. }else if(x<mid){
  16. rig=mid-1;
  17. mid=(lef+rig)/2;
  18. }else if(mid==x){
  19. break;
  20. }else if(lef>rig){
  21. return -1;
  22. }
  23. }
  24. for(int i=0;i<n;i++){
  25. if(a[i]==mid){
  26. return i;
  27. }
  28. }
  29. }
  30.  
  31. int main(void) {
  32. int n,x,i;
  33. int *a;
  34. int ans = -1;
  35. scanf("%d %d",&n,&x);
  36. a = (int*)malloc(sizeof(int)*n);
  37. if(a==NULL){
  38. printf("ERROR\n");
  39. return -1;
  40. }
  41. for(i=0;i<n;i++){
  42. scanf("%d",&a[i]);
  43. }
  44. ans = binary_search(a,n,x);
  45. if(ans != -1) printf("a[%d] = %d\n",ans,a[ans]);
  46. else printf("not found\n");
  47. free(a);
  48. return 0;
  49. }
Success #stdin #stdout 0s 5320KB
stdin
12 5
1
3
4
5
8
9
11
12
14
23
25
28

stdout
a[3] = 5