0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

代表的なアルゴリズム

Posted at

バブルソート
右隣の値と比較して大きい方を右に入れ替える。
これを何セットかループさせると値の昇順になる。

例: {34, 20, 10, 6} という配列を昇順に並べたいとき、

【1セット目】
・比較1回目:配列0番目と1番目比較→34の方が大きい→ {20, 34, 10, 6}
・比較2回目:配列1番目と2番目比較→34の方が大きい→ {20, 10, 34, 6}
・比較3回目:配列2番目と3番目比較→34の方が大きい→ {20, 10, 6, 34}

【2セット目】
・比較1回目:配列0番目と1番目比較→20の方が大きい→ {10, 20, 6, 34}
・比較2回目:配列1番目と2番目比較→20の方が大きい→ {10, 6, 20, 34}
※配列2番目と3番目の比較はする必要ない!
なぜなら、1セット目で一番大きい値をセットしたため、3番目の方が大きいという答えはもう出ている。比較しても絶対に入れ替えは発生しない。

【3セット目】
・比較1回目:配列0番目と1番目比較→10の方が大きい→ {6, 10, 20, 34}
※こちらも同様で、1~2セット目で大きい値をセットした文との比較は必要ない。
よってここで終了。

といった流れで昇順ソートができる。
これをコードに当てはめると…

// 何かしらの配列
int[] array = {};
for (int i = 0; i < array.length - 1; i++){
    for (int j = 0; j < array.length - (i + 1); j++) {
        if (array[j] > array[j + 1]) {
            // array[j]とarray[j+1]を入れ替える処理
        }
    }
}

この外側のforは「セット数」
配列の要素数(length) -1 回

for (int i = 0; i < array.length - 1; i++){

内側のforは「比較回数」
配列の要素数(length) - その時のセット数(可変していくiは0始まりのため+1で辻褄合わせ)

for (int j = 0; j < array.length - (i + 1); j++) {

フィッシャーイェーツ
数字をランダムに並べ替えたいとき。
※雑ですが取り急ぎのメモ。

import java.util.Arrays;
import java.util.Random;

public class Fukusyu4 {
    public static void main (String[] args) {
        int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

        Random random = new Random();

        //要素数の大きいインデックスから順にカウントダウン(10個目→9個目・・・)
        //長さ(要素数)は10個だが、配列番号(インデックス)は0から始まるため、辻褄を合わせるために-1する。
        //このi は、配列のインデックス数を指定するために使う!
        for (int i = numbers.length -1; i > 0; i --) {

            //0からi+1(この場合10)までのランダムな整数を生成。要素が0始まりだから+1
            //random.nextInt(値) ⇒指定した値未満の範囲でランダムな整数を生成
            int rNum = random.nextInt(i + 1);

            //tempに選択中の要素(インデックス大きい順)を退避
            int temp = numbers[i];
            //元の場所(右端)に、ランダム生成された要素番号の数字を格納
            numbers[i] = numbers[rNum];
            //入れ替え
            numbers[rNum] = temp;
        }
        System.out.println("シャッフル後: " + Arrays.toString(numbers));
    }
}



0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?