반응형
void heapify(vector<int>& v, int size, int i) {
int c = 2 * i + 1; // 왼쪽자식 선택
if (c < size - 1 && v[c] < v[c + 1]) c++; //오른쪽자식 존재하면서, 오른쪽자식이 더크면 오른쪽 자식 선택
if (c < size && v[i] < v[c]) swap(v[i], v[c]); // 부모보다 자식이 더크면 둘이 바꿈
if (c < size / 2) heapify(v, size, c); //내부노드에서 한정하여 반복
}
void heapSort(vector<int>& v, int size) {
for (int i = size / 2;i >= 0;i--) {
heapify(v, size, i);
}
for (int i = size - 1;i >= 0;i--) {
swap(v[i], v[0]);//힙이 만들어지고 맨처음값과 맨 뒷 값 변경
heapify(v, i, 0);// 사이즈 조절 후
}
}
제자리성 : 제자리 정렬
시간복잡도
최악시간 복잡도 = O(nlogn) (완전 이진트리)
알고리즘
1. 전체 이진트리로 만들기
2. 서브트리마다 최대 힙구조로 만들기
3. 맨 첫번째 원소와 마지막 원소를 스왑
4. 위의 과정 반복
반응형
'Lecture > Algorithm' 카테고리의 다른 글
[탐색] 이진탐색 (Binary Search ) (0) | 2021.05.10 |
---|---|
[정렬] 기수정렬 ( Radix Sort ) (0) | 2021.05.09 |
[정렬] 병합정렬 ( Merge Sort ) (0) | 2021.05.09 |
[정렬] 셸 정렬 ( Shell Sort ) (0) | 2021.05.09 |
[정렬] 삽입정렬 ( Insertion Sort ) (0) | 2021.05.09 |