자료구조 - 힙 정렬
힙 정렬이란 최대 힙 트리나 최소 힙 트리를 구성해 정렬을 하는 방법이다.
내림차순 정렬을 위해서는 최대 힙을 구성하고 오름차순 정렬을 위해서는 최소 힙을 구성하면 된다.
예를 들어 {2, 8, 5, 3, 9, 1} 배열은 다음과 같은 힙 정렬의 과정으로 오름차순 정렬할 수 있다.
▼ 힙 정렬 코드
import java.io.*;
import java.util.*;
public class Main {
public static void HeapSort(int arr[], int n) {
heapify(arr, n);
for (int i = n - 1; i > 0; i--) {
swap(arr, 0, i);
heapify(arr, i);
}
}
public static void heapify(int arr[], int n) {
int p = (n - 1) / 2;
for (int i = p; i >= 0; i--) {
int leftChild = i * 2 + 1;
int rightChild = i * 2 + 2;
int maxIndex = i;
if (leftChild < n && arr[leftChild] > arr[maxIndex]) {
maxIndex = leftChild;
}
if (rightChild < n && arr[rightChild] > arr[maxIndex]) {
maxIndex = rightChild;
}
if (maxIndex != i) {
swap(arr, i, maxIndex);
heapify(arr, n);
}
}
}
public static void swap(int arr[], int first, int last) {
int temp = arr[first];
arr[first] = arr[last];
arr[last] = temp;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("정렬할 요소의 개수 : ");
int N = sc.nextInt();
int arr[] = new int[N];
System.out.print("요소 입력 : ");
for (int i = 0; i < N; i++)
arr[i] = sc.nextInt();
HeapSort(arr, N);
System.out.print("정렬된 배열: ");
for (int i = 0; i < N; i++)
System.out.print(arr[i] + " ");
}
}
실행 결과