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 >= sizereturn;
    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

+ Recent posts