ソート選択(ソートの選択)
6138 ワード
整列選択(Selection Sort)
特定のデータの最小値を検索し、先頭のデータを置換するソートアルゴリズム.
時間複雑度:O(N^2)
例
最初のデータ1
は最小値にソートされました
先頭のデータは10
で、最小値は2
です.👉 swap
先頭のデータは5
で、最小値は3
です.👉 swap
先頭のデータは8
で、最小値は4
です.👉 swap
先頭のデータは7
で、最小値は5
です.👉 swap
先頭のデータは6
で、最小値は6
です.👉 あぶらがみ
先頭のデータは8
で、最小値は7
です.👉 swap
先頭のデータは8
で、最小値は8
です.👉 あぶらがみ
先頭のデータは10
で、最小値は9
です.👉 swap
先頭のデータは10
で、最小値は10
です.👉 あぶらがみ
インプリメンテーション
github link def selection_sort(data):
for i in range(len(data)):
min_idx = i
for j in range(i+1, len(data)):
if (data[min_idx] > data[j]):
min_idx = j
data[i], data[min_idx] = data[min_idx], data[i]
return data
if __name__ == "__main__":
data = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]
res = selection_sort2(data)
print('res: ', res)
重複データの数:
1つ目:0からnまでの最小値を検索し、データ[0]が大きい場合はdata[0]とswapを使用します.
2つ目:1からnの最小値を検索し、データ[1]がより大きい場合はdata[1]とswapを使用します.
(i-1)2つ目:i~nの最小値を検索し、データ[i]が大きい場合はdata[i]とswapを使用する
(2)データ長で循環する、
(3)最初に一番前のインデックスを最小要素のインデックスに設定
(4-6)一番前の要素を除いて、一番小さい数字を探します
(7)swap:C言語と異なり,Pythonは一時記憶変数を用いずに2つの変数の値を変更することができる.int a = 3;
int b = 5;
int temp = a;
a = b;
b = temp;
C言語でswapを行うには、変数temp
を一時的に格納する必要がある.
時間の複雑さ
N-1
にソートし、最小の数を見つけて一番前に送信します.
最小の数を見つけるには、毎回比較演算が必要です.以上の実装コードに基づいて,計算回数はN+(N−1)+(N−2)+...+2と見ることができます.
近似値で表すとNx(N+1)/2であり,bigoマーキング法で簡単にO(N^2)と表すことができる.
ソースコードには二重for文が用いられているので,時間的複雑度はO(N^2)と考えられる.つまり、ソートするデータが100個ある場合、ソートを選択する実行時間は10000倍になります.
アルゴリズムの解題に使用するソートを選択するのは遅いです.
また、現在のデータの状態にかかわらず、すべての要素を無条件に比較し、位置を変更するため、効率が低下します.
References
羅東彬アルゴリズム課
Reference
この問題について(ソート選択(ソートの選択)), 我々は、より多くの情報をここで見つけました
https://velog.io/@ny_/정렬-알고리즘-선택-정렬selection-sort
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def selection_sort(data):
for i in range(len(data)):
min_idx = i
for j in range(i+1, len(data)):
if (data[min_idx] > data[j]):
min_idx = j
data[i], data[min_idx] = data[min_idx], data[i]
return data
if __name__ == "__main__":
data = [1, 10, 5, 8, 7, 6, 4, 3, 2, 9]
res = selection_sort2(data)
print('res: ', res)
int a = 3;
int b = 5;
int temp = a;
a = b;
b = temp;
Reference
この問題について(ソート選択(ソートの選択)), 我々は、より多くの情報をここで見つけました https://velog.io/@ny_/정렬-알고리즘-선택-정렬selection-sortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol