teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

説明の修正

2020/10/17 08:28

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -50,7 +50,7 @@
50
50
  正の数と負の数が混ざっている場合、data[j] が負の数なら
51
51
  比較対象になるので、変なソート結果になることがあります。
52
52
 
53
- それから、こはバブルソートではありません。
53
+ それから、この質問のコードはバブルソートではありません。
54
54
  バブルソートというのは、隣り合う配列要素同士を比較するものです。
55
55
  data[i] と data[j] は離れています。
56
56
 
@@ -59,9 +59,8 @@
59
59
  data[0]~data[5] の中から最大値を求めて data[0] に入れる。
60
60
  data[1]~data[5] の中から最大値を求めて data[1] に入れる。
61
61
  というのを繰り返します。
62
+ 質問のコードはそうなっていません。
62
63
 
63
- コードはそうなっていません。
64
-
65
64
  data[0]~data[5] の中から最小値を求めて data[0] に入れる。
66
65
  data[0]~data[5] の中から最小値を求めて data[1] に入れる。
67
66
  ...
@@ -69,6 +68,8 @@
69
68
 
70
69
  結果としてはちゃんとソートされます。
71
70
 
71
+ なお、私が書いた for文一つのコードは選択ソートです。
72
+
72
73
  ソートに for文を一つも使わなくて書けることを示します。
73
74
  while文にするわけではありません。
74
75
  ```Java

1

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

2020/10/17 08:28

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -35,4 +35,66 @@
35
35
  System.out.println();
36
36
  }
37
37
  }
38
+ ```
39
+ **追記**
40
+ 解決済みになりましたが、どのように理解して解釈済みにしたのかを、
41
+ 回答に対するコメントか、質問への追加かで書いてもらいたいものです。
42
+
43
+ 質問のコードには疑問点があります。
44
+ ```Java
45
+ if (data[i] < 0) {
46
+ } else if (data[i] > data[j]) {
47
+ ```
48
+ なぜ data[i] が負の場合、比較対象にしないのでしょうか?
49
+ 入力データが全部負の数の場合、ソートは行われません。
50
+ 正の数と負の数が混ざっている場合、data[j] が負の数なら
51
+ 比較対象になるので、変なソート結果になることがあります。
52
+
53
+ それから、これはバブルソートではありません。
54
+ バブルソートというのは、隣り合う配列要素同士を比較するものです。
55
+ data[i] と data[j] は離れています。
56
+
57
+ 選択ソートかというと、そうでもありません。
58
+ 選択ソートというのは、降順(大きい順)の場合、
59
+ data[0]~data[5] の中から最大値を求めて data[0] に入れる。
60
+ data[1]~data[5] の中から最大値を求めて data[1] に入れる。
61
+ というのを繰り返します。
62
+
63
+ コードはそうなっていません。
64
+
65
+ data[0]~data[5] の中から最小値を求めて data[0] に入れる。
66
+ data[0]~data[5] の中から最小値を求めて data[1] に入れる。
67
+ ...
68
+ data[0]~data[5] の中から最小値を求めて data[5] に入れる。
69
+
70
+ 結果としてはちゃんとソートされます。
71
+
72
+ ソートに for文を一つも使わなくて書けることを示します。
73
+ while文にするわけではありません。
74
+ ```Java
75
+ import java.util.Scanner;
76
+
77
+ public class SortArray {
78
+ static int[] data = new int[6];
79
+
80
+ static void print(String s) {
81
+ for (int e : data) { System.out.print(s + e); s = ","; }
82
+ System.out.println();
83
+ }
84
+
85
+ static void sort(int i, int j) {
86
+ if (data[i] < data[j]) {
87
+ int a = data[i]; data[i] = data[j]; data[j] = a;
88
+ }
89
+ if (++j < data.length || (j = ++i) < data.length) sort(i, j);
90
+ }
91
+
92
+ public static void main(String[]args) {
93
+ Scanner sc = new Scanner(System.in);
94
+ for (int i = 0; i < data.length; i++) data[i] = sc.nextInt();
95
+ print("配列dataは、");
96
+ sort(0, 0);
97
+ print("配列orderは、");
98
+ }
99
+ }
38
100
  ```