본문 바로가기
Computer Languages/C | C++

C/C++ 로 Heap Sort (isnert & remove) 구현하기

by blackcon 2022. 8. 3.

0. 주저리

아래 소스코드는 대학생 시절때 자료구조 과제로 진행하였던 소스코드이구요.
그 당시의 코드를 그대로 올려서 공유드립니다.
Heap Sort가 궁금하시다면 Wikipedia 페이지를 공유드리니 참고해주세요.

1. Heap Sort

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

void out(int *a)
{
    printf("%d\n", a[0]);
    for(int i = 0; i < 10;i++){
        for(int j = 0; j < 10; j++){
            if((2*j+1) == i){
                printf("%d, %d\n", a[i], i); /*왼쪽 출력*/
            }
            else if((2*j+2) == i){
                printf("%d, %d\n\n", a[i], i); /*오른쪽 출력*/
            } 
        }
    }
}

void insert(int *a, int data)

{
    /*
    1. 마지막(현재) 인덱스에 data를 넣는다.
    2. 부모와 비교하면서 자식이 크면 자리를 바꾼다.
    */

    int current =10;
    int parent = 0;
    int tmp = 0;

    a[current] = data;

    parent = (current -1)/2;



    while( (current != 0) && (a[current] > a[parent]) ){
        tmp = a[parent];
        a[parent] = a[current];
        a[current] = tmp;
        current = parent; /*부모인덱스 변경*/
        parent = (current -1) / 2; /*자식으로 설정*/
    }
}

void downheap(int *a, int current)

{

    int child = 0;
    int tmp = 0;

    if(current == 10) return;
    else{
        child = 2 * current + 1;
        if(child+1 != 0){
            if(a[child+1] > a[child]) child = child +1;
        }   

        if(a[current] < a[child]){

            tmp = a[current];
            a[current] = a[child];
            a[child] = a[current];

            downheap(a, child);
        }
    }
}

void remove(int *a)

{

    int cnt = 10;
    int data = a[0]; /*root값 return*/

    a[0] = a[cnt - 1]; /*마지막값 root로 이동*/
    cnt --;

    downheap(a, 0);
}

int main(void)
{
    int a[10] = {24, 19, 12, 17, 10, 5, 4, 9, 7};

    insert(a, 26);
    out(a);

    remove(a);
    out(a);

    return 0;
}