Heap Sort(힙 정렬)
Heap Sort는 고급 프로그래밍 기법에서도 자주 사용될 정도로 중요한 알고리즘에 속한다. Heap Sort는 Heap tree structure를 사용하는 정렬방법이다.
Heap은 최솟값이나 최댓값을 빠르게 찾아내기 위해 완전 이진 트리를 사용하는데, 최대힙은 부모 노드가 자식 노드보다 큰 힙이라고 할 수 있다.
힙 정렬에서는 Heapify algorithm이라는 부모와 두 자식노드를 비교하여 더 큰 자식과 자신의 위치를 바꾸는 알고리즘이다. 이것을 최하단 노드까지 비교하게 됩니다.
Heap Sort는 Heapify algorithm의 속도가 log n 전체 데이터 갯수가 n개이므로 O(N*logN)의 시간복잡도를 가지게 됩니다.
Heap Sort Code
#include<iostream>
void heapify(int data[], int n, int i)
{
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < n && data[l] > data[largest])
largest = l;
if (r < n && data[r] > data[largest])
largest = r;
if (largest != i) {
std::swap(data[i], data[largest]);
heapify(data, n, largest);
}
}
void heapSort(int data[], int n)
{
for (int i = n / 2 - 1; i >= 0; i--)
heapify(data, n, i);
for (int i = n - 1; i > 0; i--)
{
std::swap(data[0], data[i]);
heapify(data, i, 0);
}
}
void printData(int data[], int n)
{
for (int i = 0; i < n; ++i)
std::cout << data[i] << " ";
}
int main()
{
int data[] = {5, 8, 2, 7, 4, 1, 9, 6, 3};
int number = sizeof(data) / sizeof(data[0]);
heapSort(data, number);
printData(data, number);
return 0;
}
Author And Source
이 문제에 관하여(Heap Sort(힙 정렬)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@scantykneesocks/Heap-Sort힙-정렬저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)