원소의 개수가 n인 최대 힙에서 최대 원소 삭제
class MaxHeap:
def remove(self):
if len(self.data) > 1:
self.data[1], self.data[-1] = self.data[-1], self.data[1]
data = self.data.pop[-1]
self.maxHeapify(1) # 1번부터 max 만족하게 내려간다는 뜻
else:
data = None
return data
class MaxHeap:
def maxHeapify(self, i):
left = ...
right = ...
smallest = i
# 자신 (i), 왼쪽 자식 (left), 오른쪽 자식 (right) 중 최대를 찾음
# 이것의 인덱스를 smallest에 담음
if smallest != i:
# 현재 노드(i)와 최댓값 노드 (smallest) 의 값 바꾸기
# 재귀적으로 maxHeapify를 호출
def heapsort(unsorted):
H = MaxHeap()
fot item in unsorted:
H.insert(item)
sorted = []
d = H.remove()
while d:
sorted.append(d)
d = H.remove()
return sorted