티스토리 뷰

Algorithm

힙 정렬

할루루 2018. 3. 1. 15:40
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
func heapify(array: inout [Int], index: Int, size: Int){
    var largest: Int = index
    let leftIndex = index * 2 + 1
    let rightIndex = index * 2 + 2
    if(leftIndex < size && array[leftIndex] > array[largest]){
        largest = leftIndex
    }
    if(rightIndex < size && array[rightIndex] > array[largest]){
        largest = rightIndex
    }
    if(largest != index){
        let temp = array[largest]
        array[largest] = array[index]
        array[index] = temp
        heapify(array: &array, index: largest, size: size)
    }
}
 
func heapSort(array: inout [Int]){
    let size = array.count
    for i in stride(from: size / 2 - 1, through: 0, by: -1){
        heapify(array: &array, index: i, size: size)
    }
    for i in stride(from: size - 1, through: 0, by: -1){
        let temp = array[0]
        array[0= array[i]
        array[i] = temp
        heapify(array: &array, index: 0, size: i)
    }
}
cs



heapify 함수는 주어진 인덱스부터 트리를 타고 내려가면서 힙 성질을 만족하게 하는 함수이다.


heapSort 함수의 첫 번째 for문에 의하여 max heap이 만들어지고 내림차순 정렬이 된다.


아래의 for문에 의해 오름차순 정렬된 결과가 나온다.

'Algorithm' 카테고리의 다른 글

퀵 정렬 (C)  (0) 2018.04.10
합병 정렬 (C)  (0) 2018.04.10
합병 정렬  (0) 2018.03.01
삽입 정렬  (0) 2018.03.01
버블 정렬  (0) 2018.03.01
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/03   »
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
글 보관함