- 정렬되지 않은 숫자 배열이 있다.
- [0, 1, 2, 3, 2, 5, 0, 5, 2, 3]
- 각 숫자의 개수를 센다.
- 0은 2개
- 1은 1개
- 2는 3개
- 3은 2개
- 4는 0개
- 5는 2개
- 이걸 배열로 만든다.(이걸 숫자 카운트 배열이라 하겠다)
- 이때 숫자는 인덱스로
- 개수는 값으로 한다.
- [2, 1, 3, 2, 0, 2]
- 왼쪽에서 오른쪽으로 누적합을 계산한다. (이걸 누적합 배열이라 하겠다)
- [2, 3, 6, 8, 8, 10]
- 각각의 값들이 정렬될 배열의 인덱스를 알려준다. (아래에서 다시 설명한다.)
- 그런데 이상하다!
- 값들이 인덱스라고 했는데 마지막 값에 10이 있다.
- 나는 10개의 배열(인덱스 0~9)을 정렬하는데 인덱스 10이 나오다니?
- 그렇다.
- 여기서 전체 배열에 -1을 해줘도 되고
- 아니면
- 나중에 인덱스를 확인하고 값을 넣을 때 -1을 해줘도 된다.
- 본인은 누적합 배열에서 미리 -1을 하겠다.
- 따라서,
- 누적합 배열은 아래와 같이 완성된다.
- [1, 2, 5, 7, 7, 9]
- 정렬
- 정렬할 배열 : [0, 1, 2, 3, 2, 5, 0, 5, 2, 3]
- 가장 뒤부터 왼쪽으로 오면서 정렬한다.
- 가장 뒤의 값이 3
- 누적합 배열에서 인덱스가 3인 값을 확인한다 -> 7
- [1, 2, 5, 7, 7, 9]
- 새로운 배열(정렬된 값을 넣을 배열)을 만들어 7번째 인덱스에 3을 넣어주고 7에 -1을 하여 6으로 변경한다. (다른 3이 들어갈 자리를 알려줌)
- 누적합 배열 : [1, 2, 5, 6, 7, 9]
- 정렬된 배열 : [null, null, null, null, null, null, null, 3, null, null]
- 이렇게 2번부터 4번까지 반복하면 된다.
- 한번 더
- 정렬할 배열 : [0, 1, 2, 3, 2, 5, 0, 5, 2, 3]
- 다음 정렬할 값 : 2
- 누적합 배열에서 인덱스가 2인 값 : 5
- [1, 2, 5, 6, 7, 9]
- 정렬된 값을 넣을 배열의 5번째 인덱스에 2를 넣어주고 5에서 -1 하여 4로 만든다.
- 누적합 배열 : [1, 2, 4, 6, 7, 9]
- 정렬된 배열 : [null, null, null, null, null, 2, null, 3, null, null]
- 2번부터 4번까지 반복.
- 정렬할 배열 : [0, 1, 2, 3, 2, 5, 0, 5, 2, 3]
- 정렬 완료
- [0, 0, 1, 2, 2, 2, 3, 3, 5, 5]
Counting Sort : 계수 정렬
Counting Sort Counting Sort Counting Sort 소개 정렬 과정 애니메이션 예시 구현 정리 끝 소개 Counting Sort 는 정렬 알고리즘으로 의 시간복잡도를 갖습니다. 반면 일반적 상황에서 가장 빠른 정렬 알고리즘.
bowbowbow.tistory.com