回答編集履歴

2

説明の修正

2020/10/17 08:28

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -102,7 +102,7 @@
102
102
 
103
103
 
104
104
 
105
- それから、こはバブルソートではありません。
105
+ それから、この質問のコードはバブルソートではありません。
106
106
 
107
107
  バブルソートというのは、隣り合う配列要素同士を比較するものです。
108
108
 
@@ -120,9 +120,7 @@
120
120
 
121
121
  というのを繰り返します。
122
122
 
123
-
124
-
125
- コードはそうなっていません。
123
+ 質問のコードはそうなっていません。
126
124
 
127
125
 
128
126
 
@@ -140,6 +138,10 @@
140
138
 
141
139
 
142
140
 
141
+ なお、私が書いた for文一つのコードは選択ソートです。
142
+
143
+
144
+
143
145
  ソートに for文を一つも使わなくて書けることを示します。
144
146
 
145
147
  while文にするわけではありません。

1

質問のこーどの疑問点を追加

2020/10/17 08:28

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -73,3 +73,127 @@
73
73
  }
74
74
 
75
75
  ```
76
+
77
+ **追記**
78
+
79
+ 解決済みになりましたが、どのように理解して解釈済みにしたのかを、
80
+
81
+ 回答に対するコメントか、質問への追加かで書いてもらいたいものです。
82
+
83
+
84
+
85
+ 質問のコードには疑問点があります。
86
+
87
+ ```Java
88
+
89
+ if (data[i] < 0) {
90
+
91
+ } else if (data[i] > data[j]) {
92
+
93
+ ```
94
+
95
+ なぜ data[i] が負の場合、比較対象にしないのでしょうか?
96
+
97
+ 入力データが全部負の数の場合、ソートは行われません。
98
+
99
+ 正の数と負の数が混ざっている場合、data[j] が負の数なら
100
+
101
+ 比較対象になるので、変なソート結果になることがあります。
102
+
103
+
104
+
105
+ それから、これはバブルソートではありません。
106
+
107
+ バブルソートというのは、隣り合う配列要素同士を比較するものです。
108
+
109
+ data[i] と data[j] は離れています。
110
+
111
+
112
+
113
+ 選択ソートかというと、そうでもありません。
114
+
115
+ 選択ソートというのは、降順(大きい順)の場合、
116
+
117
+ data[0]~data[5] の中から最大値を求めて data[0] に入れる。
118
+
119
+ data[1]~data[5] の中から最大値を求めて data[1] に入れる。
120
+
121
+ というのを繰り返します。
122
+
123
+
124
+
125
+ コードはそうなっていません。
126
+
127
+
128
+
129
+ data[0]~data[5] の中から最小値を求めて data[0] に入れる。
130
+
131
+ data[0]~data[5] の中から最小値を求めて data[1] に入れる。
132
+
133
+ ...
134
+
135
+ data[0]~data[5] の中から最小値を求めて data[5] に入れる。
136
+
137
+
138
+
139
+ 結果としてはちゃんとソートされます。
140
+
141
+
142
+
143
+ ソートに for文を一つも使わなくて書けることを示します。
144
+
145
+ while文にするわけではありません。
146
+
147
+ ```Java
148
+
149
+ import java.util.Scanner;
150
+
151
+
152
+
153
+ public class SortArray {
154
+
155
+ static int[] data = new int[6];
156
+
157
+
158
+
159
+ static void print(String s) {
160
+
161
+ for (int e : data) { System.out.print(s + e); s = ","; }
162
+
163
+ System.out.println();
164
+
165
+ }
166
+
167
+
168
+
169
+ static void sort(int i, int j) {
170
+
171
+ if (data[i] < data[j]) {
172
+
173
+ int a = data[i]; data[i] = data[j]; data[j] = a;
174
+
175
+ }
176
+
177
+ if (++j < data.length || (j = ++i) < data.length) sort(i, j);
178
+
179
+ }
180
+
181
+
182
+
183
+ public static void main(String[]args) {
184
+
185
+ Scanner sc = new Scanner(System.in);
186
+
187
+ for (int i = 0; i < data.length; i++) data[i] = sc.nextInt();
188
+
189
+ print("配列dataは、");
190
+
191
+ sort(0, 0);
192
+
193
+ print("配列orderは、");
194
+
195
+ }
196
+
197
+ }
198
+
199
+ ```