[アルゴリズム]:ソート選択(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と比較し,互いに交換する.
資料移動の回数はあらかじめ決めておきます.
安定性を満たさない.
つまり、同じ値のレコードがある場合、相対位置が変更される可能性があります.
計算時間の複雑さ
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)
https://gmlwjd9405.github.io/2018/05/06/algorithm-selection-sort.html C言語の分かりやすい資料構造 選択ソート-ウィキペディア
ソートアルゴリズムの概念概要の選択
選択ソートアルゴリズムの具体的な概念
選択ソートは、1番目のデータを2番目のデータから最後のデータまで順次比較し、最小の値を1番目のデータに配置し、2番目のデータを3番目のデータから最後のデータまで順次比較し、その中の最小の値を見つけ、2番目の位置に再配置するプロセスでソートします.
1ラウンド目では最小値のデータが一番前に表示されるので、2ラウンド目では2番目のデータを使用して比較します.同様に、第3ラウンドでは、第3の資料を並べ替える
ソートアルゴリズムの選択例
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
Reference
この問題について([アルゴリズム]:ソート選択(C)), 我々は、より多くの情報をここで見つけました https://velog.io/@qlwb7187/알고리즘-선택정렬Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol