반응형
정의
- 차순으로 정렬하는 방법 중 하나
- 이진트리를 기반한 데이터 스트럭처
- 정렬이 되는 트리에 넣고 그대로 출력하면 정렬이 됨.
알고리즘 순서
- 이진트리의 맞는 위치에 받은 배열을 차례대로 넣음
- 이진트리의 조건에 맞춰서 정리됨
- 이트리의 조건에 맞춰서 출력하면 정렬됨
자바 코드
public static void heapSort(int arr[]) {
int n = arr.length;
// Build heap (rearrange array)
for (int i = n / 2 - 1; i >= 0; i--)
heapTree(arr, n, i);
// One by one extract an element from heap
for (int i = n - 1; i > 0; i--) {
// Move current root to end
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
// call max heapify on the reduced heap
heapTree(arr, i, 0);
}
}
// To heapify a subtree rooted with node i which is
// an index in arr[]. n is size of heap
public static void heapTree(int arr[], int n, int i) {
int largest = i; // Initialize largest as root
int l = 2 * i + 1; // left = 2*i + 1
int r = 2 * i + 2; // right = 2*i + 2
// If left child is larger than root
if (l < n && arr[l] > arr[largest])
largest = l;
// If right child is larger than largest so far
if (r < n && arr[r] > arr[largest])
largest = r;
// If largest is not root
if (largest != i) {
int swap = arr[i];
arr[i] = arr[largest];
arr[largest] = swap;
// Recursively heapify the affected sub-tree
heapTree(arr, n, largest);
}
}
*이 코드는 https://www.geeksforgeeks.org/heap-sort/ 에서 가져옴
평균 시간 복잡도 Avg. time complexity
$O(n, log, n)$
최악 시간 복잡도 Worst time complexity
$O(n, log, n)$
공간 복잡도 space complexity
$O(1)$
안정성 stability
no
계산법
순회 횟수
- 트리에서 확인해가며 위치를 찾을 때(입력) : $O(log, n)$
- 하나씩 방문해서 출력할 때(출력) : $O(n)$
$O(n) \cdot O(log\, n)=O(n\, log\, n)$
반응형
'old > Programming' 카테고리의 다른 글
파이썬의 자료구조-튜플 Tuple (0) | 2021.10.26 |
---|---|
[JAVA-AdoptOpenJDK]를 [windows 11]에 설치하기 (0) | 2021.10.10 |
병합정렬 Merge Sort (0) | 2021.10.01 |
인텔리제이intellij에 라이브러리library(jar 파일) 추가하기 (0) | 2021.09.22 |
퀵정렬 Quick Sort (0) | 2021.09.22 |