본문 바로가기
스터디/자료구조

[ 자료구조 ] Heap sort

by 알 수 없는 사용자 2020. 2. 24.

힙 정렬 : 힙 정렬은 힙 트리를 이용한 정렬입니다.

 

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
// 왼쪽 자식의 인덱스 = (부모의 인덱스) * 2
// 오른쪽 자식의 인덱스 = (부모의 인덱스) * 2 + 1
// 부모의 인덱스 = (자식의 인덱스) / 2
 
void heap(int* array, int size)
{
    for (int i = 1; i < size; i++)
    {
        int child = i; // 힙은 최상위 부모 노트가 숫자 1부터 부여된다.
 
        while (child > 0// 최상위 부모 노트가 될 때까지 반복한다.
        {
            int root = (child - 1/ 2;
            
            if (array[root] < array[child]) { // 자식이 부모보다 크다면 바꾸기.
                int temp = array[root];
                array[root] = array[child];
                array[child] = temp;
            }
 
            child = root;
        }
    }
}
 
int main()
{
    int array[10= { 19410625378 };
 
    heap(array, 11); // 힙을 만든다.
 
    for (int i = 9; i >= 0; i--)
    {
        // i == 9
        // 최상위 부모 노트와 맨 마지막 원소와 바꾸고
        int temp = array[i];
        array[i] = array[0];
        array[0= temp;
 
        // 맨 마지막으로 간 최상위 노트를 제외하고 다시 힙을 정렬한다.
        // 이렇게 하면 큰 숫자부터 계속 가져올 수 있다.
        heap(array, i);
    }
 
    return 0;
}
 

'스터디 > 자료구조' 카테고리의 다른 글

[ 자료구조 ] Merge sort  (0) 2020.02.24
[ 자료구조 ] Quick sort  (0) 2020.02.23
[ 자료구조 ] Insertion sort  (0) 2020.02.23
[ 자료구조 ] Bubble Sort  (0) 2020.02.23
[ 자료구조 ] Selection Sort  (0) 2020.02.23