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
46
47
void DownHeap(int* arr, int CurrentIndex,int size) {
    if (CurrentIndex >= size - 1return;
 
    int leftIndex = CurrentIndex * 2 + 1;
 
    int rightIndex = CurrentIndex * 2 + 2;
 
    int largeValueIndex = CurrentIndex;
 
    if (leftIndex <= size - 1 && rightIndex <= size - 1) {
 
        largeValueIndex = arr[leftIndex] < arr[rightIndex] ? rightIndex : leftIndex;
 
    }
    else if (leftIndex <= size - 1 && rightIndex > size - 1) {
 
        largeValueIndex = leftIndex;
 
    }
 
    if (arr[largeValueIndex] > arr[CurrentIndex]) {
        swap(&arr[largeValueIndex], &arr[CurrentIndex]);
        return DownHeap(arr, largeValueIndex, size);
    }
 
}
 
void BuildHeap(int* arr, int size) {
 
    for (int i = size / 2 - 1; i >= 0; i--)
        DownHeap(arr, i, size);
 
}
 
 
void HeapSort(int* arr, int size) {
    
    BuildHeap(arr, size);
 
 
    for(int i = 0 ; i < size ; i++) {
        swap(&arr[0], &arr[size - 1 - i]);
        DownHeap(arr, 0 ,size - i - 1); // 바뀌기 전에 마지막인덱스 값을 특정 짓는 것 이기 때문에 
        // 해주지 않으면 원래의 제일 작은 값과 큰 값이 바뀌는 경우가 생겨버린다.
    }
 
}
cs


'알고리즘' 카테고리의 다른 글

Dynamic Coin Change  (0) 2018.05.29
Astar  (0) 2018.05.26
행렬곱셈  (0) 2018.05.26
Sequencial Search  (0) 2018.05.26
BinarySearch  (0) 2018.05.26

+ Recent posts