알고리즘
힙정렬(heap sort)
giicha2
2021. 1. 13. 09:35
이진 트리 : 모든 노드의 자식 노드가 2개 이하인 트리구조
완전 이진트리
힙정렬
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void heapify(int arr[], int here, int size) {
int left = here * 2 + 1;
int right = here * 2 + 2;
int max=here;
if (left < size&&arr[left]>arr[max])
max = left;
if (right < size&&arr[right]>arr[max])
max = right;
if (max != here) {
swap(&arr[here], &arr[max]);
heapify(arr, max, size);
}
}
void buildHeap(int arr[], int size) {
int i,j;
for (i = size / 2 - 1; i >= 0; i--) {
heapify(arr, i, size);
for (j = 0; j < size; j++)
printf("%d ", arr[j]);
printf("\n\n");
}
}
void heapSort(int arr[],int size) {
int treeSize;
buildHeap(arr, size);
for (treeSize = size - 1; treeSize >= 0; treeSize--) {
swap(&arr[0], &arr[treeSize]);
heapify(arr, 0,treeSize);
}
}
void printArray(int arr[], int size) {
int i;
for (i = 0; i < size; i++)
printf("%d ", arr[i]);
printf("\n");
}
int main() {
int arr[] = { 9,7,6,5,4,3,2,2,1,3 };
int size = sizeof(arr) / sizeof(int);
heapSort(arr, size);
printArray(arr, size);
}