fork download
  1. def heapify(arr, n, i):
  2. largest = i
  3. left = 2 * i + 1
  4. right = 2 * i + 2
  5.  
  6. if left < n and arr[left] > arr[largest]:
  7. largest = left
  8.  
  9. if right < n and arr[right] > arr[largest]:
  10. largest = right
  11.  
  12. if largest != i:
  13. arr[i], arr[largest] = arr[largest], arr[i]
  14. heapify(arr, n, largest)
  15.  
  16.  
  17. def build_heap(arr):
  18. n = len(arr)
  19. for i in range(n // 2 - 1, -1, -1):
  20. heapify(arr, n, i)
  21.  
  22.  
  23. def heap_sort(arr):
  24. n = len(arr)
  25.  
  26. build_heap(arr)
  27.  
  28. for i in range(n - 1, 0, -1):
  29. arr[0], arr[i] = arr[i], arr[0]
  30. heapify(arr, i, 0)
  31.  
  32.  
  33. if __name__ == "__main__":
  34. arr = [5, 10, 264, 362, 865, 63, 94, 475, 135, 932,
  35. 25, 9, 33, 287, 332, 745, 377, 820, 62, 1]
  36.  
  37. # 1. 힙 생성 결과 출력
  38. heap_arr = arr[:]
  39. build_heap(heap_arr)
  40. print("1. 생성된 힙 배열:", heap_arr)
  41.  
  42. # 2. 힙 정렬 결과 출력
  43. sorted_arr = arr[:]
  44. heap_sort(sorted_arr)
  45. print("2. 정렬된 배열:", sorted_arr)
  46.  
Success #stdin #stdout 0.02s 7136KB
stdin
Standard input is empty
stdout
('1. \xec\x83\x9d\xec\x84\xb1\xeb\x90\x9c \xed\x9e\x99 \xeb\xb0\xb0\xec\x97\xb4:', [932, 865, 332, 820, 25, 63, 287, 745, 362, 10, 5, 9, 33, 264, 94, 475, 377, 135, 62, 1])
('2. \xec\xa0\x95\xeb\xa0\xac\xeb\x90\x9c \xeb\xb0\xb0\xec\x97\xb4:', [1, 5, 9, 10, 25, 33, 62, 63, 94, 135, 264, 287, 332, 362, 377, 475, 745, 820, 865, 932])