728x90
#include <stdio.h>
#define num 8
int node[] = {2,1,33,21,6,42,50,5};
void heapify(int n, int start, int *node)
{
int l,r,tmp;
l = start*2+1;
r = start*2+2;
if(r>n)
{
return;
}
if(node[l] > node[start] || node[r] > node[start])
{
if(node[l] > node[r])
{
tmp = node[start];
node[start]=node[l];
node[l]=tmp;
return heapify(n,l,node);
}
else
{
tmp = node[start];
node[start]=node[r];
node[r]=tmp;
return heapify(n,r,node);
}
}
return;
}
void maxHeap(int n)
{
int start = n/2-1;
for(int i = start ; i >=0 ; i--)
{
heapify(n,i,node);
}
}
void heapSort(int n)
{
int tmp;
n--;
while(n>1)
{
maxHeap(n);
tmp = node[n];
node[n] = node[0];
node[0] = tmp;
n--;
}
}
void print(int *node)
{
for(int i=0 ; i<num; i++)
{
printf("%d ",node[i]);
}
}
int main()
{
int n = num;
heapSort(n);
print(node);
}
이해가 안가시는 부분 댓글로 질문해주세요.
참고 - https://iyk2h.tistory.com/142
728x90
'CS > 알고리즘 및 자료구조' 카테고리의 다른 글
동기(Synchronous), 비동기(Asynchronous), 블록킹(Blocking),논블록킹(Non-Blocking) (0) | 2022.02.11 |
---|---|
Keras Tuner (0) | 2021.06.04 |
하이퍼밴드(Hyperband), Successive Halving Algorithm(SHA)의 흐름 이해하기 (0) | 2021.05.19 |
힙 정렬(Heap Sort) (0) | 2021.05.14 |
c언어 - 이진 트리 레벨 순회 (LevelTraverse) (1) | 2021.04.16 |
댓글