Search

ํž™ ์ •๋ ฌ

ํž™ ์ •๋ ฌ (Heap Sort)

ํž™ ์ •๋ ฌ์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ํž™(Heap) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ ํž™ ๋˜๋Š” ์ตœ์†Œ ํž™์„ ๊ตฌ์„ฑํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ์š”์†Œ๋ฅผ ๊บผ๋‚ด์–ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ์š”์†Œ

โ€ข
ํž™(Heap) ์ž๋ฃŒ๊ตฌ์กฐ ํ™œ์šฉ
โ€ข
์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜
โ€ข
๋ถˆ์•ˆ์ • ์ •๋ ฌ
โ€ข
์ œ์ž๋ฆฌ ์ •๋ ฌ(in-place sorting)

์‹œ๊ฐ„ ๋ณต์žก๋„

์ตœ์„ ์˜ ๊ฒฝ์šฐ
O(nlog n)
ํ‰๊ท ์˜ ๊ฒฝ์šฐ
O(nlog n)
์ตœ์•…์˜ ๊ฒฝ์šฐ
O(nlog n)
๊ณต๊ฐ„ ๋ณต์žก๋„
O(1)

์ฃผ์š” ํŠน์ง•

โ€ข
ํ•ญ์ƒ O(nlog n)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋ณด์žฅ
โ€ข
์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๊ฑฐ์˜ ํ•„์š”ํ•˜์ง€ ์•Š์Œ
โ€ข
๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ •๋ ฌ์— ํšจ์œจ์ 
โ€ข
๋ถˆ์•ˆ์ • ์ •๋ ฌ์ด๋ฏ€๋กœ ๋™์ผํ•œ ๊ฐ’์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜์ง€ ์•Š์Œ

์˜ˆ์‹œ ์ฝ”๋“œ (Java)

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 left = 2*i + 1; int right = 2*i + 2; if (left < n && arr[left] > arr[largest]) largest = left; if (right < n && arr[right] > arr[largest]) largest = right; if (largest != i) { int swap = arr[i]; arr[i] = arr[largest]; arr[largest] = swap; heapify(arr, n, largest); } } }
Java
๋ณต์‚ฌ

์ง์ ‘ ๊ตฌํ˜„

public class MyHeapSort { public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; HeapSort hs = new HeapSort(); hs.sort(arr); System.out.println("์ •๋ ฌ๋œ ๋ฐฐ์—ด:"); for (int i : arr) { System.out.print(i + " "); } } }
Java
๋ณต์‚ฌ

Java Collections์œผ๋กœ ๊ตฌํ˜„

import java.util.PriorityQueue; public class HeapSortWithPQ { public static void heapSort(int[] arr) { PriorityQueue<Integer> heap = new PriorityQueue<>(); // ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํž™์— ์ถ”๊ฐ€ for (int value : arr) { heap.offer(value); } // ํž™์—์„œ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์–ด ๋ฐฐ์—ด์— ์ €์žฅ for (int i = 0; i < arr.length; i++) { arr[i] = heap.poll(); } } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; heapSort(arr); System.out.println("์ •๋ ฌ๋œ ๋ฐฐ์—ด:"); for (int i : arr) { System.out.print(i + " "); } } }
Java
๋ณต์‚ฌ