자료구조 | 추출되는 데이터 |
---|---|
스택(Stack) | 가장 나중에 삽입된 데이터 |
큐(Queue) | 가장 먼저 삽입된 데이터 |
우선순위 큐(Priority Queue) | 가장 우선순위가 높은 데이터 |
데이터의 개수가 N개일 때, 구현 방식에 따라서 시간 복잡도 비교.
우선순위 큐 구현방식 | 삽입시간 | 삭제시간 |
---|---|---|
리스트 | O(1) | O(N) |
힙(Heap) | O(logN) | O(logN) |
단순히 N개의 데이터를 힙에 넣었다가 모든 꺼내는 작업은 정렬과 동일(Heap 정렬)
import sys
import heapq
input = sys.stdin.readline
def heapsort(iterable):
h=[]
result=[]
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
n = int(input())
arr=[]
for i in range(n):
arr.append(int(input()))
res = heapsort(arr)
for i in range(n):
print(res[i]) # python은 기본적으로 min heap 형태로 동작 -> 오름차순 정렬
for v in iterable:
heapq.heappush(h,-v)
for i in range(len(h)):
result.append(heapq.heappop(h)*-1)
return result