ソートアルゴリズム


<ソート選択>
  • 未処理のデータから最小のデータを選択し、前の
  • を繰り返し使用する.
    # 선택 정렬
    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]
    
    print(array)
    <ソートの挿入>
  • の未処理データを選択し、適切な位置
  • に挿入する.
  • 選択ソートに比べて、実装の難易度は高いが、効率は高い
  • データはある程度並べ替えた場合に有効な
  • である.
    # 삽입 정렬
    array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8]
    
    for i in range(1, len(array)):
      for j in range(i, 0, -1):
        if array[j-1] > array[j]:
          array[j], array[j-1] = array[j-1], array[j]
        else:
          break
    
    print(array)
    <クイックソート>
  • は基準データを設定し、
  • はビッグデータとビッグデータの位置を変更した
  • 並べ替えと並べ替えライブラリの基礎となるアルゴリズム
  • 最も基本的な設定は、最初のデータをPivotに設定することです.
  • 昇順:左側にピボットより大きい値を検索し、右側にピボットより小さい値を検索
  • # 퀵정렬
    array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]
    
    def quick_sort(array, start, end):
      if start >= end:
        return
      pivot = start
      left = start + 1
      right = end
      while(left <= right):
        while(left <= end and array[left] <= array[pivot]):
          left += 1
        while(right > start and array[right] >= array[pivot]):
          right -= 1
        if(left > right):
          array[right], array[pivot] = array[pivot], array[right]
        else:
          array[left], array[right] = array[right], array[left]
      
      quick_sort(array, start, right - 1)
      quick_sort(array, right + 1, end)
    
    quick_sort(array,0,len(array)-1)
    print(array)
    
    # 파이썬의 장점을 살린 퀵정렬
    def quick_sort(array):
      if len(array) <= 1:
        return array
        
      pivot = array[0]
      tail = array[1:]
    
      left_side = [x for x in tail if x <= pivot]
      right_side = [y for y in tail if y > pivot]
    
      return quick_sort(left_side) + [pivot] + quick_sort(right_side)
    
    print(quick_sort(array))
    <ソート数>
  • は、特定の条件を満たす場合にのみ利用可能であるが、動作速度は非常に速い
  • である.
  • データのサイズが整数形式に制限場合は
  • を用いる.
  • 最悪の場合でも
  • (データ個数+データ個数)のうち最高値を保証できる
    # 계수 정렬
    array = [7, 5, 9, 0, 3, 1, 6, 2, 9, 1, 4, 8, 0, 5, 2]
    
    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 = " ")
    <比較ソートアルゴリズム>