Counting sort (계수정렬) 알고리즘
테스트 케이스의 개수가 10,000,000 정도로 매우 많고, 수의 범위가 1~10000으로 제한적인 경우 계수정렬을 사용한다.
1. 계수 정렬이란?
- 배열의 인덱스를 특정 데이터의 값으로 여기는 정렬 방법이다
- 배열의 크기는 데이터의 범위를 포함할 수 있도록 설정
- 데이터가 등장한 횟수를 셈
2. 예시
데이터: 3, 1, 6, 2, 9, 1, 4, 8, 0, 2 인 경우
arrayIndex : 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
arrayValue : 1 | 2 | 2 | 1 | 1 | 0 | 1 | 0 | 1 | 1 |
3. 코드로 구현
var numArray = Array(repeating: 0, count: 10001)
- 수의 범위를 포함하는 크기의 데이터 배열 만들기
for _ in 0..<num {
let a = Int(readLine()!)!
numArray[a] += 1
}
- 데이터를 받아 인덱스에 해당하는 배열의 값을 1만큼 증가시킨다
for i in 0..<numArray.count {
if numArray[i] != 0 {
for _ in 0..<numArray[i] {
print(i)
}
}
}
- 해당 인덱스의 값이 0이 아닌 경우 인덱스를 출력한다.
Author And Source
이 문제에 관하여(Counting sort (계수정렬) 알고리즘), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@sun02/Counting-sort-계수정렬-알고리즘저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)