回答編集履歴

3

追加

2024/04/05 05:16

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -14,3 +14,139 @@
14
14
  という判断が要因です。
15
15
 
16
16
  a を 14 個まで拡張して a[13] にも値を入れ、その値がソート **されない** ことを確認しては如何でしょうか。
17
+ ```c
18
+ #include <stdio.h>
19
+
20
+ int main(void)
21
+ {
22
+ int a[14] = {13, 1, 5, 4, 3, 7, 9, 10, 8, 6, 11, 2, 12, -1}; //-1を追加
23
+ int i, j, k, tmp;
24
+
25
+ puts("並べ替え前:");
26
+ for(i = 0; i < 14; i++) { //13→14
27
+ printf("%d ", a[i]);
28
+ }
29
+ putchar('\n');
30
+
31
+ for(i = 13; i > 0; i--) { // バブルソート
32
+ for(j = 0; j < i; j++) {
33
+ if(a[j] > a[j+1]) {
34
+ tmp = a[j];
35
+ a[j] = a[j+1];
36
+ a[j+1] = tmp;
37
+ }
38
+ for(k = 0; k < 14; k++) { // 途中経過表示 13→14
39
+ printf("%d ", a[k]);
40
+ }
41
+ putchar('\n');
42
+ }
43
+ }
44
+
45
+ puts("並べ替え後:");
46
+ for(i = 0; i < 14; i++) { //13→14
47
+ printf("%d ", a[i]);
48
+ }
49
+ putchar('\n');
50
+
51
+ return 0;
52
+ }
53
+ ```
54
+ 実行結果
55
+ ```
56
+ 並べ替え前:
57
+ 13 1 5 4 3 7 9 10 8 6 11 2 12 -1
58
+ 1 13 5 4 3 7 9 10 8 6 11 2 12 -1
59
+ 1 5 13 4 3 7 9 10 8 6 11 2 12 -1
60
+ 1 5 4 13 3 7 9 10 8 6 11 2 12 -1
61
+ 1 5 4 3 13 7 9 10 8 6 11 2 12 -1
62
+ 1 5 4 3 7 13 9 10 8 6 11 2 12 -1
63
+ 1 5 4 3 7 9 13 10 8 6 11 2 12 -1
64
+ 1 5 4 3 7 9 10 13 8 6 11 2 12 -1
65
+ 1 5 4 3 7 9 10 8 13 6 11 2 12 -1
66
+ 1 5 4 3 7 9 10 8 6 13 11 2 12 -1
67
+ 1 5 4 3 7 9 10 8 6 11 13 2 12 -1
68
+ 1 5 4 3 7 9 10 8 6 11 2 13 12 -1
69
+ 1 5 4 3 7 9 10 8 6 11 2 12 13 -1
70
+ 1 5 4 3 7 9 10 8 6 11 2 12 -1 13
71
+ 1 5 4 3 7 9 10 8 6 11 2 12 -1 13
72
+ 1 4 5 3 7 9 10 8 6 11 2 12 -1 13
73
+ 1 4 3 5 7 9 10 8 6 11 2 12 -1 13
74
+ 1 4 3 5 7 9 10 8 6 11 2 12 -1 13
75
+ 1 4 3 5 7 9 10 8 6 11 2 12 -1 13
76
+ 1 4 3 5 7 9 10 8 6 11 2 12 -1 13
77
+ 1 4 3 5 7 9 8 10 6 11 2 12 -1 13
78
+ 1 4 3 5 7 9 8 6 10 11 2 12 -1 13
79
+ 1 4 3 5 7 9 8 6 10 11 2 12 -1 13
80
+ 1 4 3 5 7 9 8 6 10 2 11 12 -1 13
81
+ 1 4 3 5 7 9 8 6 10 2 11 12 -1 13
82
+ 1 4 3 5 7 9 8 6 10 2 11 -1 12 13
83
+ 1 4 3 5 7 9 8 6 10 2 11 -1 12 13
84
+ 1 3 4 5 7 9 8 6 10 2 11 -1 12 13
85
+ 1 3 4 5 7 9 8 6 10 2 11 -1 12 13
86
+ 1 3 4 5 7 9 8 6 10 2 11 -1 12 13
87
+ 1 3 4 5 7 9 8 6 10 2 11 -1 12 13
88
+ 1 3 4 5 7 8 9 6 10 2 11 -1 12 13
89
+ 1 3 4 5 7 8 6 9 10 2 11 -1 12 13
90
+ 1 3 4 5 7 8 6 9 10 2 11 -1 12 13
91
+ 1 3 4 5 7 8 6 9 2 10 11 -1 12 13
92
+ 1 3 4 5 7 8 6 9 2 10 11 -1 12 13
93
+ 1 3 4 5 7 8 6 9 2 10 -1 11 12 13
94
+ 1 3 4 5 7 8 6 9 2 10 -1 11 12 13
95
+ 1 3 4 5 7 8 6 9 2 10 -1 11 12 13
96
+ 1 3 4 5 7 8 6 9 2 10 -1 11 12 13
97
+ 1 3 4 5 7 8 6 9 2 10 -1 11 12 13
98
+ 1 3 4 5 7 8 6 9 2 10 -1 11 12 13
99
+ 1 3 4 5 7 6 8 9 2 10 -1 11 12 13
100
+ 1 3 4 5 7 6 8 9 2 10 -1 11 12 13
101
+ 1 3 4 5 7 6 8 2 9 10 -1 11 12 13
102
+ 1 3 4 5 7 6 8 2 9 10 -1 11 12 13
103
+ 1 3 4 5 7 6 8 2 9 -1 10 11 12 13
104
+ 1 3 4 5 7 6 8 2 9 -1 10 11 12 13
105
+ 1 3 4 5 7 6 8 2 9 -1 10 11 12 13
106
+ 1 3 4 5 7 6 8 2 9 -1 10 11 12 13
107
+ 1 3 4 5 7 6 8 2 9 -1 10 11 12 13
108
+ 1 3 4 5 6 7 8 2 9 -1 10 11 12 13
109
+ 1 3 4 5 6 7 8 2 9 -1 10 11 12 13
110
+ 1 3 4 5 6 7 2 8 9 -1 10 11 12 13
111
+ 1 3 4 5 6 7 2 8 9 -1 10 11 12 13
112
+ 1 3 4 5 6 7 2 8 -1 9 10 11 12 13
113
+ 1 3 4 5 6 7 2 8 -1 9 10 11 12 13
114
+ 1 3 4 5 6 7 2 8 -1 9 10 11 12 13
115
+ 1 3 4 5 6 7 2 8 -1 9 10 11 12 13
116
+ 1 3 4 5 6 7 2 8 -1 9 10 11 12 13
117
+ 1 3 4 5 6 7 2 8 -1 9 10 11 12 13
118
+ 1 3 4 5 6 2 7 8 -1 9 10 11 12 13
119
+ 1 3 4 5 6 2 7 8 -1 9 10 11 12 13
120
+ 1 3 4 5 6 2 7 -1 8 9 10 11 12 13
121
+ 1 3 4 5 6 2 7 -1 8 9 10 11 12 13
122
+ 1 3 4 5 6 2 7 -1 8 9 10 11 12 13
123
+ 1 3 4 5 6 2 7 -1 8 9 10 11 12 13
124
+ 1 3 4 5 6 2 7 -1 8 9 10 11 12 13
125
+ 1 3 4 5 2 6 7 -1 8 9 10 11 12 13
126
+ 1 3 4 5 2 6 7 -1 8 9 10 11 12 13
127
+ 1 3 4 5 2 6 -1 7 8 9 10 11 12 13
128
+ 1 3 4 5 2 6 -1 7 8 9 10 11 12 13
129
+ 1 3 4 5 2 6 -1 7 8 9 10 11 12 13
130
+ 1 3 4 5 2 6 -1 7 8 9 10 11 12 13
131
+ 1 3 4 2 5 6 -1 7 8 9 10 11 12 13
132
+ 1 3 4 2 5 6 -1 7 8 9 10 11 12 13
133
+ 1 3 4 2 5 -1 6 7 8 9 10 11 12 13
134
+ 1 3 4 2 5 -1 6 7 8 9 10 11 12 13
135
+ 1 3 4 2 5 -1 6 7 8 9 10 11 12 13
136
+ 1 3 2 4 5 -1 6 7 8 9 10 11 12 13
137
+ 1 3 2 4 5 -1 6 7 8 9 10 11 12 13
138
+ 1 3 2 4 -1 5 6 7 8 9 10 11 12 13
139
+ 1 3 2 4 -1 5 6 7 8 9 10 11 12 13
140
+ 1 2 3 4 -1 5 6 7 8 9 10 11 12 13
141
+ 1 2 3 4 -1 5 6 7 8 9 10 11 12 13
142
+ 1 2 3 -1 4 5 6 7 8 9 10 11 12 13
143
+ 1 2 3 -1 4 5 6 7 8 9 10 11 12 13
144
+ 1 2 3 -1 4 5 6 7 8 9 10 11 12 13
145
+ 1 2 -1 3 4 5 6 7 8 9 10 11 12 13
146
+ 1 2 -1 3 4 5 6 7 8 9 10 11 12 13
147
+ 1 -1 2 3 4 5 6 7 8 9 10 11 12 13
148
+ -1 1 2 3 4 5 6 7 8 9 10 11 12 13
149
+ 並べ替え後:
150
+ -1 1 2 3 4 5 6 7 8 9 10 11 12 13
151
+ ```
152
+ -1 がソートされてしまっています。

2

追加

2024/04/05 05:10

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -12,3 +12,5 @@
12
12
  >コードにミスはありません。
13
13
 
14
14
  という判断が要因です。
15
+
16
+ a を 14 個まで拡張して a[13] にも値を入れ、その値がソート **されない** ことを確認しては如何でしょうか。

1

追記

2024/04/05 05:00

投稿

jimbe
jimbe

スコア12737

test CHANGED
@@ -1,2 +1,14 @@
1
1
  とりあえずコードのマークダウンはコード(やパソコンのコンソールの表示)だけに適用するようにしたほうが良いと思います。
2
2
  説明まで含まれても閉じられていて気が付かない場合があります。
3
+
4
+ 一部で正常に動作した(ように見えた)からと、 CPU の所為かもと判断するには早すぎたようです。
5
+ ```
6
+ for(i = 13; i > 0; i--) { // バブルソート
7
+ for(j = 0; j < i; j++) {
8
+ if(a[j] > a[j+1]) {
9
+ ```
10
+ は i=13 で j=12 (j<i) の時、 a[j+1] → a[13] を参照します。つまり
11
+
12
+ >コードにミスはありません。
13
+
14
+ という判断が要因です。