fork download
  1. #include <stdio.h>
  2. #include<stdlib.h>
  3.  
  4. int binary_search(int a[],int n,int x){//no_search関数の挿入
  5. int left=0;
  6. int right=n-1;
  7. while(left<=right){
  8. int mid=(left+right)/2;
  9. if(a[mid]==x){//midがx自身だったら
  10. return mid;//midを返して終わり(見つかった)
  11. }else if(a[mid]<x){//midよりもxの方が大きいとき
  12. left=mid+1;//midよりも小さい側の値を捨てmidより1大きい値から範囲に入れる
  13. }else{//midよりもxの方が小さいとき
  14. right=mid-1;//midよりも大きい側の値を捨てmidより1小さい値から範囲に入れる
  15. }
  16. }
  17. return -1;//ここまで来たということは「見つからなかった」ということなので-1を返す
  18. }
  19.  
  20. int main(void) {
  21. // your code goes here
  22. int n,x,i;
  23. int *a;
  24. int ans=-1;
  25. scanf("%d%d",&n,&x);//n,xに入力させる
  26.  
  27. a=(int*)malloc(sizeof(int)*n);//aの動的確保をする
  28. if(a==NULL){//エラー処理
  29. printf("ERROR");
  30. return -1;//エラーだとしても-1を返す
  31. }
  32. for(i=0;i<n;i++){
  33. scanf("%d",&a[i]);//動的確保したaの配列に入力させる
  34. }
  35. ans=binary_search(a,n,x);
  36. if(ans!=-1){
  37. printf("a[%d]=%d\n",ans,a[ans]);
  38. }else{
  39. printf("not found\n");
  40. }
  41. free(a);
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0s 5316KB
stdin
12 5
1 2 3 4 5 8 9 13 16 21 25 27
stdout
a[4]=5