Counting Sort(계수 정렬)란 주어진 수를 오름차순하는 정렬이다.
정렬에 필요한 시간 복잡도는 O(n + k)로 적은 숫자 같은 경우에는 속도가 빠르다는 장점이 있지만 수백만까지 입력되는 경우면 매우 느릴 수 있다는 단점이 있다.
var array = [Int](repeating: 0, count: 5)
var countArray = [Int](repeating: 0, count: 5)
countArray: [0, 0, 0, 0, 0]
for i in inputArray {
countArray[i] += 1
}
countArray: [1, 2, 1, 2, 2]
for i in 0..<countArray.count {
let sum = countArray[i] + countArray[i - 1]
sumArray.append(sum)
}
countArray: [1, 3, 4, 6, 8]
var sortedArray = [Int](repeating: 0, count: array.count)
for i in array {
-> countArray[i] -= 1
-> sortedArray[countArray[i]] = i
}
이를 활용하여 백준문제를 풀어봤는데 시간초과가 나서 해결을 못하고 있다....
백준 10989
import Foundation
let n = Int(readLine()!)!
var array: [Int] = []
for _ in 1...n {
array.append(Int(readLine()!)!)
}
let maxValue = array.max()!
var countArray = [Int](repeating: 0, count: maxValue + 1)
for i in array {
countArray[i] += 1
}
for i in 1..<countArray.count {
let sum = countArray[i] + countArray[i - 1]
countArray[i] = sum
}
var sortedArray = [Int](repeating: 0, count: array.count)
for i in array {
countArray[i] -= 1
sortedArray[countArray[i]] = i
}
print(sortedArray)
참고
https://www.youtube.com/watch?v=Urmb0FpW6Hk&t=297s
https://joycestudios.tistory.com/62