ํ ์ ๋ ฌ (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
- ํ ์ ๋ ฌ :
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)
๋ถ์์ ํ ์ ๋ ฌ