[アルゴリズム]:ソート選択(C)


この授業では、選択ソートについて説明します.

ソートアルゴリズムの概念概要の選択

  • オンサイトソートアルゴリズム
  • 入力配列(ソートされていない値)以外のメモリを必要としないソート方法
  • は、この順序で要素を配置する位置を決定し、どの要素を入れるかを選択するアルゴリズムである.
  • の第1の順序では、第1の位置に最上位を配置する.
  • の第2の順序では、残りの値の最大値が第2の位置に加えられる.
  • コースの説明
  • で与えられた配列の中で最高値を探します.
  • は、その値を一番前の値(pass)に置き換えます.
  • は、第1の位置を除いた残りのリストを同様の方法で置換する.
  • 要素のみが残るまで、上記の1〜3つのプロセスを繰り返します.
  • 選択ソートアルゴリズムの具体的な概念


  • 選択ソートは、1番目のデータを2番目のデータから最後のデータまで順次比較し、最小の値を1番目のデータに配置し、2番目のデータを3番目のデータから最後のデータまで順次比較し、その中の最小の値を見つけ、2番目の位置に再配置するプロセスでソートします.

  • 1ラウンド目では最小値のデータが一番前に表示されるので、2ラウンド目では2番目のデータを使用して比較します.同様に、第3ラウンドでは、第3の資料を並べ替える
  • ソートアルゴリズムの選択例

  • アレイに9、6、7、3、および5が格納されていると仮定し、データを昇順にソートします.

  • 1回転:
    1番目の資料9と2番目の資料を最後の資料と比較し、最小値を1番目の位置に移動します.この過程で,資料を4回比較した.

  • 2回転:
    2番目の資料6と3番目の資料を最後の資料と比較し、最小値を2番目の位置に移動します.この過程で,資料を3回比較する.

  • 3回転:
    3番目の資料7と4番目の資料を最後の資料と比較し、最小値を3番目の位置に移動します.この過程で,資料を2回比較した.

  • 4回転:
    4番目の資料9を最後の7と比較し,互いに交換する.
  • <ソートコードの選択>

    
    # include <stdio.h>
    # define SWAP(x, y, temp) ( (temp)=(x), (x)=(y), (y)=(temp) )
    # define MAX_SIZE 5
    
    // 선택 정렬
    void selection_sort(int list[], int n) {
        int i, j, least, temp;
    
        // 마지막 숫자는 자동으로 정렬되기 때문에 (숫자 개수-1) 만큼 반복한다.
        for (i = 0; i < n - 1; i++) {
            least = i;
    
            // 최솟값을 탐색한다.
            for (j = i + 1; j < n; j++) {
                if (list[j] < list[least])
                    least = j;
            }
    
            // 최솟값이 자기 자신이면 자료 이동을 하지 않는다.
            if (i != least) {
                SWAP(list[i], list[least], temp);
            }
        }
    }
    
    void main() {
        int i;
        int n = MAX_SIZE;
        int list[n] = { 9, 6, 7, 3, 5 };
    
        // 선택 정렬 수행
        selection_sort(list, n);
    
        // 정렬 결과 출력
        for (i = 0; i < n; i++) {
            printf("%d\n", list[i]);
        }
    }
    

    ソートアルゴリズムの特徴の選択


    長所


    資料移動の回数はあらかじめ決めておきます.

    短所


    安定性を満たさない.
    つまり、同じ値のレコードがある場合、相対位置が変更される可能性があります.

    ソートの時間的複雑さの選択


    計算時間の複雑さ

    比較回数


    2つのforループの実行回数
    外環:(n-1)回
    内側ループ(最適値の検索):n-1、n-2、...、2、および1

    スワップ回数


    外部リングの実行回数と同じです.ていじかんどうさ
    3(n-1)回、3回移動して交換する必要があるため
    T(n) = (n-1) + (n-2) + … + 2 + 1 = n(n-1)/2 = O(n^2)

    References

  • https://gmlwjd9405.github.io/2018/05/06/algorithm-selection-sort.html
  • C言語の分かりやすい資料構造
  • 選択ソート-ウィキペディア