본문 바로가기
Algorithm

[Algorithm] Heap Sort

by Saerong2 2020. 10. 26.

 

소스코드

#include <stdio.h>
#include <algorithm>
using namespace std;

void heapify(int* a, int pos, int size)
{
    int l = pos * 2 + 1;
    int r = pos * 2 + 2;
    int mx_idx = pos;

    if (l < size && a[l] > a[mx_idx])
        mx_idx = l;
    if (r < size && a[r] > a[mx_idx])
        mx_idx = r;

    if (mx_idx != pos) {
        swap(a[pos], a[mx_idx]);
        heapify(a, mx_idx, size);
    }
}

void buildHeap(int* a, int size)
{
    for (int i = size/2 ; i >= 0; --i) {
        heapify(a, i, size);
    }
}

void heapSort(int* a, int size)
{
    buildHeap(a, size);
    for (int i = size - 1; i >= 0; --i) {
        swap(a[0], a[i]);
        heapify(a, 0, i);
    }
}

int main()
{
    int a[8] = { 1,5,3,7,8,6,2,4 };
    heapSort(a, 8);
    for (int i = 0; i < 8; ++i) {
        printf("%d ", a[i]);
    }
}

 

 

 

 

 

공부한 것을 정리하기 위한 기록입니다.

틀린 부분이 있다면 부드럽게 알려주세요.

'Algorithm' 카테고리의 다른 글

[Algorithm] Merge Sort  (0) 2020.10.24
[Algorithm] Quick Sort  (0) 2020.10.24
[Algorithm] Quick Selection  (0) 2020.10.23
[Algorithm] Master Theorem (feat. Quick Selection)  (0) 2020.10.23

댓글