힙 정렬이란? - 루트 노드에 최대/최소 값만 위치할 수 있는 힙의 특성을 이용해서 인덱스를 제한해나가면서 정렬. 추상적 구현 - 리프 노드가 아닌 노드들부터 heapify()를 이용해 느슨한 정렬 유지. - 마지막 인덱스 ~ 루트 노드 직전 인덱스까지 최대/최소 값인 루트 노드 값과 끝 값 위치 교환하며 heapify() 반복. # PYTHON CODE n = int(input('정렬할 리스트 원소의 수를 입력하시오: ')) seq = [] for _ in range(n): a = int(input('리스트의 원소를 입력하시오: ')) if a == - 1: break seq.append(a) def heap_sort(seq): for i in range(n // 2 - 1, -1, -1): # 리프 ..
힙이란? - 완전 이진트리의 한 종류이며, 느슨한 정렬을 이루고 있는 자료구조. - 느슨한 정렬이란 리프 노드들 간에는 큰 특징이 없으며 루트 - 서브 간의 위계만 존재한 정렬을 의미함. - 최대/최소 힙 두 형태가 있으며 느슨한 정렬을 이루고 있기 때문에 순회나 특정 원소가 필요한 연산은 적절치 않음. - 우선순위 큐/힙정렬 등의 알고리즘에 주로 사용됨. 추상적 구현 - 힙 클래스 생성 후 값 추가, 삭제의 기능을 갖는 함수 부여. - 값 추가하는 함수 : 트리의 맨 끝에 값 append, 마지막 인덱스 // 2 값이 0보다 클 동안 값 비교. - 값 제거하는 함수 : 특정 값은 제거 불가능, 루트 노드 값을 제거, 맨 끝 값을 루트 노드로 올려준 뒤, heapify()를 통해 정리. - heapify..