티스토리 뷰
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문에 의해 오름차순 정렬된 결과가 나온다.
댓글