fork download
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int i, j, k, temp, n;
  6. int a, b, c, f;
  7. int x[] = {88, 39, 13, 14, 65, 34, 22, 94, 92, 20};
  8. int y[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  9. int v = 92;
  10.  
  11. n = sizeof(x) / sizeof(x[0]);
  12.  
  13. for (i=0;i<n-1;i++) {
  14. for (j=0;j<n-i-1;j++) {
  15. if (x[y[j+1]] < x[y[j]]) {
  16. temp = y[j];
  17. y[j] = y[j+1];
  18. y[j+1] = temp;
  19. }
  20. }
  21. printf("%d回目の内側ループ後の配列xは", i+1);
  22. for (k=0;k<n;k++)
  23. printf("\t%d", x[k]);
  24. printf("\n");
  25. printf("%d回目の内側ループ後の配列yは", i+1);
  26. for (k=0;k<n;k++)
  27. printf("\t%d", y[k]);
  28. printf("\n");
  29. }
  30.  
  31. f = 0;
  32. a = 0;
  33. b = n-1;
  34.  
  35. while (a<=b) {
  36. c = (a + b) / 2;
  37. if (x[y[c]] == v) {
  38. f = 1;
  39. break;
  40. } else if (x[y[c]] < v) {
  41. a = c + 1;
  42. } else {
  43. b = c - 1;
  44. }
  45. }
  46.  
  47. if (f == 1) {
  48. printf("成功\n");
  49. printf("%d\n",y[c]);
  50. } else {
  51. printf("失敗\n");
  52. }
  53.  
  54. // この例は練習のため故意にコメントを省いたり、わかりにくい変数名を用いたりしています。
  55. // 他人や1週間後の自分にもわかるプログラムにするためには、コメントとわかりやすい変数名が必要です。
  56.  
  57. }
  58.  
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
1回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
1回目の内側ループ後の配列yは	1	2	3	4	5	6	0	8	9	7
2回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
2回目の内側ループ後の配列yは	2	3	1	5	6	4	0	9	8	7
3回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
3回目の内側ループ後の配列yは	2	3	5	6	1	4	9	0	8	7
4回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
4回目の内側ループ後の配列yは	2	3	6	5	1	9	4	0	8	7
5回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
5回目の内側ループ後の配列yは	2	3	6	5	9	1	4	0	8	7
6回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
6回目の内側ループ後の配列yは	2	3	6	9	5	1	4	0	8	7
7回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
7回目の内側ループ後の配列yは	2	3	9	6	5	1	4	0	8	7
8回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
8回目の内側ループ後の配列yは	2	3	9	6	5	1	4	0	8	7
9回目の内側ループ後の配列xは	88	39	13	14	65	34	22	94	92	20
9回目の内側ループ後の配列yは	2	3	9	6	5	1	4	0	8	7
成功
8