힙 정렬이란?
힙 자료구조의 루트를 뽑아 정렬하는 알고리즘
시간 복잡도
최상 :
최악 :
관련 글
[Algorithm] Sort #1 - 버블 정렬 Bubble Sort
[Algorithm] Sort #2 - 선택 정렬 Selection Sort
[Algorithm] Sort #3 - 삽입 정렬 Insertion Sort
[Algorithm] Sort #4 - 병합 정렬 Merge Sort
[Algorithm] Sort #6 - 퀵 정렬 Quick Sort
병합 정렬에 이어서 평균 시간 복잡도가
힙(heap) 완전 이진트리의 자료구조로 최소 힙, 최대 힙이 있다. 최소, 최대 힙에 따라 부모 노드는 자식 노드보다 항상 작은 값이나 큰 값을 가진다. 삽입, 삭제의 경우 |
알고리즘
힙 정렬의 알고리즘은 다음과 같습니다.
- 리스트의 원소들을 모두 힙에 넣는다.
- 힙의 루트 원소를 뽑아 정렬 시킬 배열에 넣고 힙에서는 제거한다.
- 2의 과정을 n번 진행한다.
힙 정렬 예시
{ 9, 1, 7, 5, 2} 순서대로 원소가 존재한다고 가정했을 때 힙 정렬의 예시는 다음과 같습니다. {9, 1, 7, 5, 2}의 원소들을 순서대로 힙에 삽입하는 작업을 진행하고 삽입 결과 힙의 구조는 아래와 같습니다. 힙이 만들어졌다면 루트의 값을 배열에 순차적으로 넣는 작업을 n번 진행합니다.

시간 복잡도 계산
힙 정렬의 시간복잡도는 최악, 최상의 경우가 같습니다.
힙 구성
먼저 리스트의 원소들을 가지고 힙을 만들어주는 작업이 필요합니다. 힙의 삽입에 걸리는 시간은
리스트 정렬
힙의 구성이 완료되었다면, 루트의 값을 저장 후 삭제하는 작업이 필요합니다. 힙의 삭제에 걸리는 시간 또한
이전 글에서 병합 정렬은 리스트의 상태에 관계 없이
C++ Code
#include <iostream> #include <vector> #include <queue> using namespace std; int main() { vector<int> arr = {9,1,7,5,2}; priority_queue<int, vector<int>, greater<int>> heap; for(int i=0; i<arr.size(); i++) heap.push(arr[i]); for(int i=0; i<arr.size(); i++){ arr[i] = heap.top(); heap.pop(); } for(int i=0; i<arr.size(); i++) cout << arr[i]; }
'Computer Science > Algorithm' 카테고리의 다른 글
[Algorithm] Sort #6 - 퀵 정렬 Quick Sort (0) | 2021.01.16 |
---|---|
[Algorithm] Sort #4 - 병합 정렬 Merge Sort (0) | 2021.01.08 |
[Algorithm] Sort #3 - 삽입 정렬 Insertion Sort (1) | 2021.01.04 |
[Algorithm] Sort #2 - 선택 정렬 Selection Sort (0) | 2021.01.02 |
[Algorithm] Sort #1 - 버블 정렬 Bubble Sort (0) | 2020.12.29 |