【ソートアルゴリズム】バブル、選択、挿入のソートアルゴリズムの比較

バブルソート

アイデア:
1. 2 つの要素を順序どおりに比較し、大きい方の要素を配列の最後に置きます。
2. ループは最後の要素と比較しますが、この時点で、このラウンドの比較で得られた最大の数値が配列の最後にあります。
3. 比較する要素がなくなるまで、上記の手順を繰り返します。

コード:

public int[] BubbleSort(int[] array)
    {
        for (int i = 1; i < array.Length; i++)
        {
            bool _change = false;
            for (int j = 0; j < array.Length - i; j++)
            {
                if (array[j] > array[j + 1])
                {
                    int _num = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = _num;
                    _change = true;
                }
            }
            if (!_change)
            {
                break;
            }
        }
        return array;
    }


パフォーマンス分析:
データがランダムであると仮定すると、時間計算量は O(N²)、交換の平均数は N²/4 です。初期データが逆順の場合、各比較で位置を交換する必要があり、交換の回数は N² です。

選択範囲の並べ替え

アイデア:
1. すべての要素から最小の要素を選択し、その最小の要素を配列の最初の場所に置きます。
2. 残りの要素から最小の要素を見つけて、それを配列の 2 番目の位置に配置します。
3. ソートが終了するまで選択を繰り返します。

コード:

public int[] ChoiceSort(int[] array)
    {
        for (int i = 0; i < array.Length - 1; i++)
        {
            int _min = i;
            for (int j = i + 1; j < array.Length; j++)
            {
                if (array[j] < array[_min])//查找最小值的index
                {
                    _min = j;
                }
            }
            if (i != _min)//替换最小值
            {
                int _temp = array[i];
                array[i] = array[_min];
                array[_min] = _temp;
            }
        }
        return array;
    }


パフォーマンス分析:
時間計算量は O(N²) で、最大 N 回の交換が実行されます。

挿入ソート

アイデア:
1. 配列をソートされた部分とソートされていない部分に分割します。
2. 並べ替える部分をループし、取得した要素を前に配置した部分に挿入します。

コード:

 public int[] InsertSort(int[] array)
    {
        int j;
        for (int i = 1; i < array.Length; i++)
        {
            int _temp = array[i];
            j = i;
            while (j > 0 && _temp < array[j - 1])
            {
                array[j] = array[j - 1];
                j--;
            }
            array[j] = _temp;
        }
        return array;
    }


パフォーマンス分析:
時間計算量は O(N²) で、代入の数は比較の数とほぼ同じですが、代入の消費時間は交換の時間の消費とは異なるため、ランダム データと比較すると、挿入ソートはバブリングの 2 倍の速度、選択よりも高速 ソートはわずかに高速です。

要約:

- バブリング、選択、および挿入の時間計算量は O(N²) です。バブル ソートは通常は選択されません。バブル ソートは最も簡単に作成できますが、平均的なパフォーマンスは選択ソートや挿入ソートほど良くありません。
- 選択ソートにより交換の数は最小限に抑えられますが、比較の数は依然として非常に多くなります。選択ソートは、データ量が少なく、データの比較よりもデータの交換に時間がかかる場合に適用できます。
- データ量が比較的少ないか、基本的に順序付けされていると仮定すると、ほとんどの場合、挿入ソートが 3 つのアルゴリズムの中で最良の選択です。

おすすめ

転載: blog.csdn.net/qq_33461689/article/details/125636683