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

回答編集履歴

3

追記

2020/10/15 01:25

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -13,4 +13,15 @@
13
13
  }
14
14
  //}
15
15
 
16
- ```
16
+ ```
17
+
18
+ ---
19
+ 6個の要素から最大値(最小値)を探すには、5回の比較が必要になります。
20
+ 並べ替えをするので、全要素の最大(最小)を比べる必要があります。
21
+ ※最大値(最小値)を先頭にしても残りがバラバラでは意味がない
22
+
23
+ 残りの5個から最大値(最小値)を探すには、4回、残りから・・・
24
+ と、要素数-1の階乗回数の比較が必要です。(過去質問でバブルソートの比較回数を減らすというのがありましたが)
25
+ で、ご提示のロジックでは、バブルソートを少し変えて、要素数の2乗の比較をするようにしています。
26
+
27
+ ループの外側(内側)が、要素数しか回らないのであれば、2重ループにして比較を増やす必要があります。

2

あぁ・・・ハードコーディング多かった

2020/10/15 01:25

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -4,11 +4,11 @@
4
4
  ```java
5
5
  //for (int i = 0; i < data.length; i = i + 1) { //大きい順番にする
6
6
  for (int j = 0; j < data.length * data.length ; j = j + 1) {
7
- if (data[j/6] < 0) {
7
+ if (data[j/data.length] < 0) {
8
- } else if (data[j/6] > data[j%6]) {
8
+ } else if (data[j/data.length] > data[j%data.length]) {
9
- int a = data[j/6];
9
+ int a = data[j/data.length];
10
- data[j/6] = data[j%6];
10
+ data[j/data.length] = data[j%data.length];
11
- data[j%6] = a;
11
+ data[j%data.length] = a;
12
12
  }
13
13
  }
14
14
  //}

1

さぼったところ直しわすれたので

2020/10/14 12:11

投稿

momon-ga
momon-ga

スコア4828

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  変数を2つ使った方がわかりやすいとは思います。
4
4
  ```java
5
5
  //for (int i = 0; i < data.length; i = i + 1) { //大きい順番にする
6
- for (int j = 0; j < data.length * 6 ; j = j + 1) {
6
+ for (int j = 0; j < data.length * data.length ; j = j + 1) {
7
7
  if (data[j/6] < 0) {
8
8
  } else if (data[j/6] > data[j%6]) {
9
9
  int a = data[j/6];