myesn

myEsn2E9

hi
github

[冒泡ソート bubble sort]

[バブルソート bubble sort] は、隣接する要素を連続して比較して交換することでソートを実現します。このプロセスは、バブルが底から上に上昇するようなものです。

バブルソートのプロセスは、要素の交換操作を使用してシミュレートすることができます:配列の最も左端から右に向かって順番に、隣接する要素のサイズを比較し、"左の要素 > 右の要素" の場合はそれらを交換します。トラバースが完了すると、最大の要素は配列の最も右端に移動します。

バブルソートのアルゴリズムの流れ:

  1. 最初に、n 個の要素に対して "バブル" を実行し、配列の最大の要素を正しい位置に交換します
  2. 次に、残りの n-1 個の要素に対して "バブル" を実行し、2 番目に大きな要素を正しい位置に交換します
  3. これを繰り返し、n-1 回の "バブル" の後、最初の n-1 個の大きな要素が正しい位置に交換されます
  4. 残りの要素は必ず最小の要素であり、ソートする必要はないため、配列のソートが完了します。
    image
/* バブルソート */
void BubbleSort(int[] nums) {
    // 外側のループ:未ソートの範囲は [0, i]
    for (int i = nums.Length - 1; i > 0; i--) {
        // 内側のループ:未ソートの範囲 [0, i] の最大要素を範囲の最右端に交換する
        for (int j = 0; j < i; j++) {
            if (nums[j] > nums[j + 1]) {
                // nums[j] と nums[j + 1] を交換する
                (nums[j + 1], nums[j]) = (nums[j], nums[j + 1]);
            }
        }
    }
}

効率の最適化:もしあるラウンドの "バブル" で交換操作が行われなかった場合、配列は既にソートされていることを意味し、結果を直接返すことができます。そのため、このような状況を監視するためにフラグ flag を追加することができます。フラグが現れた場合、すぐに結果を返します。

/* バブルソート(フラグの最適化)*/
void BubbleSortWithFlag(int[] nums) {
    // 外側のループ:未ソートの範囲は [0, i]
    for (int i = nums.Length - 1; i > 0; i--) {
        bool flag = false; // フラグの初期化
        // 内側のループ:未ソートの範囲 [0, i] の最大要素を範囲の最右端に交換する
        for (int j = 0; j < i; j++) {
            if (nums[j] > nums[j + 1]) {
                // nums[j] と nums[j + 1] を交換する
                (nums[j + 1], nums[j]) = (nums[j], nums[j + 1]);
                flag = true;  // 交換された要素を記録する
            }
        }
        if (!flag) break;     // このラウンドのバブルで要素が交換されなかった場合、直ちに終了する
    }
}

参考#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。