ํ ์ ๋ ฌ (Heap Sort) ์๊ณ ๋ฆฌ์ฆ :
'๋ถ๋ชจ์ ๊ฐ์ด ์์์ ๊ฐ๋ณด๋ค ํญ์ ํฌ๋ค or ์๋ค' ๋ฅผ ๋ง์กฑํ๋ ์์ ์ด์งํธ๋ฆฌ ํ ์ ํน์ฑ์ ์ด์ฉํ์ฌ ์ ๋ ฌ ์ํ.
์ ํ ์ ๋ ฌ ์ ์์ฉํ ์๊ณ ๋ฆฌ์ฆ
๋ฉ์๋ swap() : a[idx1] ๊ณผ a[idx2] ๋ฅผ ๊ตํ
๋งค๊ฐ๋ณ์ : int[] a, int idx1, int idx2
๋ฉ์๋ donwHeap() : ๋ฐฐ์ด a์ index left ๋ถํฐ right ๊น์ง ์์๋ฅผ ํ์ผ๋ก ๋ง๋ ๋ค
๋งค๊ฐ๋ณ์ : int[] a, int left, int right
๋ฉ์๋ heapSort() : ๊ธธ์ด๊ฐ n์ธ ๋ฐฐ์ด a๋ฅผ ํ ์ ๋ ฌ
๋งค๊ฐ๋ณ์ : int[] a, int n
- ํ ์ ๋ ฌ :
java
๋ซ๊ธฐvoid swap(int[]a, int idx1, int idx2) {
โint t = a[idx1];
โa[idx1] = a[idx2];
โa[idx2] = t;
}
void downHeap(int[] a, int left, int right) {
โint temp = a[left];
โint child;
โint parent;
โ
โfor(parent = left; parent <(right+1)/2; parent = child) {
โโint cl = parent * 2 +1;
โโint cr = cl + 1;
โโchild = (cr <= right && a[cr] > a[cl]) ? cr : cl;
โโif(temp >= a[child])
โโโbreak;
โโa[parent] = a[child];
โ}
โa[parent] = temp;
}
โ
void heapSort(int[] a, int n) {
โfor(int i = (n-1)/2; i >= 0; i--)
โโdownHeap(a, i, n - 1);
โ
โfor(int i = n-1; i > 0; i--) {
โโswap(a, 0, i);
โโdownHeap(a, 0, i-1);
โ}
}
ํ ์ ๋ ฌ Heap Sort :
์ต์ = O(NlogN), ํ๊ท = O(NlogN), ์ต์ = O(NlogN)
๋ถ์์ ํ ์ ๋ ฌ