ツールバーの


配置


  • 特定の基準でデータをソート

  • プログラムデータは、通常、プログラムデータを加工する際の昇順または降順などの順序で使用される.

  • ソートアルゴリズムを使用してデータをソートする場合、バイナリはバイナリ検索の前処理プロセスを検索できます.

  • コンピュータはデータの規則性を直感的に理解することができず、ソースコードでソート方法を具体的に説明する必要があります.

  • ソートの説明で使用した例

    💜 ソートの選択


    ✔一番小さいデータを選択して前のデータを置換し、小さいデータを選択して前の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つずつ拡張

  • 次に、リスト内の各インデックスの値を決定すると、データの中で最も近い値のサイズを繰り返し実行します.