알고리즘
힙 정렬 (Heap Sort)
Younghun
2024. 3. 12. 09:27
1. 개요
- 완전이진트리를 기반으로 하는 정렬 알고리즘이다.
- 최대 힙을 구성한 후, 최대값을 차례대로 뽑으면서 정렬한다.
- 퀵 정렬과 병합 정렬의 성능이 더 좋아서 자주 사용되지는 않는다.
2. 특징
- 불안정 정렬이다.
- 시간복잡도: O(NLogN)
3. 코드
import java.util.Arrays;
public class HeapSortTest {
public static void main(String[] args) {
int[] nums = {3, 2, 7, 5, 11, 12, 1};
heapSort(nums);
System.out.println(Arrays.toString(nums));
}
private static void heapSort(int[] arr) {
int n = arr.length;
for (int i = n / 2 - 1; i >= 0; i--) {
heapify(arr, n, i);
}
for (int i = n - 1; i > 0; i--) {
swap(arr, 0, i);
heapify(arr, i, 0);
}
}
private static void heapify(int[] arr, int size, int i) {
int parent = i;
int leftChild = i * 2 + 1;
int rightChild = i * 2 + 2;
if (leftChild < size && arr[parent] < arr[leftChild]) {
parent = leftChild;
}
if (rightChild < size && arr[parent] < arr[rightChild]) {
parent = rightChild;
}
if (i != parent) {
swap(arr, parent, i);
heapify(arr, size, parent);
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}