[java] 자바 힙을 이용한 데이터 정렬 예시

힙(Heap)은 완전 이진 트리 자료구조의 일종으로, 각 노드의 값이 그 자식 노드의 값보다 항상 크거나 작도록 구성된 이진 트리입니다. 힙을 사용하여 데이터를 정렬할 때는 최대 힙 또는 최소 힙을 활용합니다.

아래는 Java에서 힙을 이용하여 데이터를 정렬하는 예시 코드입니다.

import java.util.Arrays;

public class HeapSort {
    public void sort(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--) {
            int temp = arr[0];
            arr[0] = arr[i];
            arr[i] = temp;
            heapify(arr, i, 0);
        }
    }

    void heapify(int arr[], int n, int i) {
        int largest = i;
        int l = 2 * i + 1;
        int r = 2 * i + 2;

        if (l < n && arr[l] > arr[largest])
            largest = l;

        if (r < n && arr[r] > arr[largest])
            largest = r;

        if (largest != i) {
            int swap = arr[i];
            arr[i] = arr[largest];
            arr[largest] = swap;

            heapify(arr, n, largest);
        }
    }

    public static void main(String args[]) {
        int arr[] = {12, 11, 13, 5, 6, 7};
        HeapSort heapSort = new HeapSort();
        heapSort.sort(arr);
        System.out.println("Sorted array: " + Arrays.toString(arr));
    }
}

위 코드는 HeapSort 클래스를 사용하여 데이터를 힙 정렬하는 방법을 보여줍니다.

힙 정렬은 전통적인 선택 정렬의 시간 복잡성인 O(n²)보다 빠른 O(n log n)의 시간 복잡성을 가지고 있어 대규모 데이터에 대한 정렬에 유용하게 사용됩니다. 힙 정렬은 또한 내부 정렬 알고리즘 중 하나로, 입력 데이터 크기에 관계없이 동일한 시간 복잡성을 보장합니다.

만약 힙 정렬의 더 자세한 내용이 필요하다면 다음 자료를 참고해보십시오: