ツールバーの
14068 ワード
配置
特定の基準でデータをソート
プログラムデータは、通常、プログラムデータを加工する際の昇順または降順などの順序で使用される.
ソートアルゴリズムを使用してデータをソートする場合、バイナリはバイナリ検索の前処理プロセスを検索できます.
コンピュータはデータの規則性を直感的に理解することができず、ソースコードでソート方法を具体的に説明する必要があります.
ソートの説明で使用した例
💜 ソートの選択
✔一番小さいデータを選択して前のデータを置換し、小さいデータを選択して前の2番目のデータを置換します.
<step1> 전체 중에서 가장 작은 데이터를 선택하여 맨 앞의 데이터와 바꿈
<step2> 정렬된 첫번재는 제외하고 이후 데이터 중 가장 작은 데이터를 선택해서 처리되지 않은 데이터 중
가장 앞에 있는 데이터와 바꿈
<step3> 가장 작은 데이터를 앞으로 보내는 과정을 9번 반복하면 마지막 데이터는 가만히 두어도
이미 정렬된 상태이므로 정렬을 마침
🧡 ソート・コードの選択
array = [7,5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
min_index = i #가장 작은 원소의 인덱스
for j in range(i+1, len(array)):
if array[min_index] > array[j]:
min_index = j
array[i], array[min_index] = array[min_index], array[i] #값 바꾸기
🔔 ソートの時間的複雑さの選択
O(N^2)
N-1番の最小数を見つけて、一番前に送る必要があります.
毎回最小数を検索するために比較演算が必要です
N + (N - 1) + (N - 2) + ... + 2 e近似値:N*(N-1)
💜 整列挿入
✔特定のデータを適切な位置に「挿入」する
選択ソートよりも時間効率の高いアルゴリズム
必要に応じて変更するだけで、データのほぼ整列がより効率的に実現
2番目のデータから、それ自体が整列していると考えられます.
<step1> 첫번재 데이터는 정렬되어있다고 판단하고 두번째 데이터가 어디로 들어갈지 판단하여
7의 왼쪽으로 들어가거나 혹은 오른쪽으로 들어가는 두 경우만 존재, 7의 왼쪽에 삽입
<step2> 이어서 9가 어떤 위치에 들어갈지 판단 ➡ 삽입 가능한 위치는 총 3가지이며 현재는 9는 5와
7보다 크기 때문에 원래 그대로 둠
<step3> 이어서 0이 어떤 위치에 들어갈지 판단 ➡ 0은 5, 7, 9와 비교했을 때 가장 작기 때문에
첫번재 위치에 삽입
<step3> 삽입하는 과정을 N-1번 반복하게 되면 다음과 같이 모든 데이터가 정렬된 것을 확인할 수 있다.
🧡 ソート・コードの挿入
array = [7,5, 9, 0, 3, 1, 6, 2, 4, 8]
for i in range(len(array)):
for j in range(i, 0, -1): #인덱스 i부터 1까지 감소하며 반복
if array[j] > array[j-1]:
array[j], array[j-1] = array[j-1], array[j] #값 바꾸기
else: #자기보다 작은 원소를 만나면 멈춤
break
🔔 挿入位置合わせの時間的複雑さ
O(N^2)
2回繰り返し使用
O(N)が望ましい
💜 ソート数
✔特定の条件が満たされている場合にのみ使用可能ですが、非常に高速なソートアルゴリズム
データ数がNであり、データ中のコストが最大の値がKである場合、カウントソートは最悪の場合でも実行時間O(N+K)を保証することができる
データのサイズが整数に制限されている場合にのみ使用します.
最大および最小のデータを含むすべての範囲のリストを宣言します.
<step1> 초기 단계 : 7 5 9 0 3 1 6 2 9 1 4 8 0 5 2 ➡ 크기가 10인 리스트 선언
<step2> _7_ 5 9 0 3 1 6 2 9 1 4 8 0 5 2
<step3> _7 5_ 9 0 3 1 6 2 9 1 4 8 0 5 2
<step3> _7 5 9 0 3 1 6 2 9 1 4 8 0 5 2_
各データはリストに何回出現し,その回数はex)5 e 2を記録する.
出力結果:00
🧡 カウントソートソース
array = [7,5, 9, 0, 3, 1, 6, 2, 4, 8, 0, 5, 2]
#모든 범위를 포함하는 리스트 선언(모든 값은 0으로 초기화)
count = [0] * (max(array) + 1)
for i in range(len(array)):
count[array[i]] += 1 #각 데이터에 해당하는 인덱스의 값 증가
for i in range(len(count)):
for j in range(count[i]):
print(i, end=' ')
🔔 挿入位置合わせの時間的複雑さ
O(N + K)
対応するインデックスの値1をリストに追加しながら、データを1つずつ拡張
次に、リスト内の各インデックスの値を決定すると、データの中で最も近い値のサイズを繰り返し実行します.
Reference
この問題について(ツールバーの), 我々は、より多くの情報をここで見つけました https://velog.io/@ghyeon1946/정렬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol