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