1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | void Build(int* arr) { int count = SIZE / 2; // 내부 노드 갯수 내부노드인덱스는 count -1; for (int i = 0; i < count; i++) { DownHeap(arr, count -1- i, SIZE); } } void DownHeap(int* arr, int index, int size) { int left = index * 2 + 1; int right = index * 2 + 2; if (left >= size && right >= size) return; if (left < size && right < size) { if ((arr[left] >= arr[right]) && (arr[left] >= arr[index])) { Swap(&arr[left], &arr[index]); return DownHeap(arr, left, size); } else if ((arr[right] >= arr[left]) && (arr[right] >= arr[index])) { Swap(&arr[right], &arr[index]); return DownHeap(arr, right, size); } } else { if (arr[left] >= arr[index]) { Swap(&arr[left], &arr[index]); return DownHeap(arr, left, size); } } return; } // 중요한점은 애초에 마지막 배열의 인덱스도 하나씩 줄여줘야 하지만 // 다운힙할때사이즈도 하나씩 줄여줘야한다. // 그런데 이미 맨처음에 스왚이 일어나기때문에 하나 더 작은 사이즈로 해야됨 int HeapSort(int* arr) { Build(arr); for (int i = 0; i < SIZE; i++) { Swap(&arr[0], &arr[SIZE - 1 - i]); DownHeap(arr, 0, SIZE - 2 -i); } return 0; } | cs |
'알고리즘' 카테고리의 다른 글
| InsertSort (0) | 2018.05.26 |
|---|---|
| SelectionSort (0) | 2018.05.26 |
| BubbleSort (0) | 2018.05.26 |
| MergeSort (0) | 2018.05.26 |
| Quick Sort (0) | 2018.05.26 |