카테고리 없음

Sorting Algorithm - 계수정렬 (counting sort)

pogles 2023. 1. 18. 11:55
  • 계수정렬은 최소값과 최대값의 차이가 1,000,000(백만)을 넘지 않을때 효과적인 정렬방식이다.
  • 계수정렬은 값을 비교해서 정렬하는 비교기반 정렬방식이 아니다.
  • 계수정렬은 최소값 ~ 최대값 범위 개수의 크기의 배열이 필요하다. ( 3 ~ 11 이라면 size=9)
  • 시간복잡도는 O(n + k) 이다. (k = 최대값의 크기)

 

 

 

초기상태 : [ 9, 5, 6, 3, 1, 2, 0, 3, 5, 6, 7, 8, 9, 5, 1, 2, 4, 5, 9, 3 ]

배열선언 = 배열의크기 (0~9) = 10

0 2 3 4 5 6 7 8 9
                   

 


 

각 원소들이 몇개 있는지 세면서(counting) 원소값과 같은 index 위치에 해당 원소값의 개수를 넣어준다.

 

 

<예시>

 

01

초기상태 : [ 9, 5, 6, 3, 1, 2, 0, 3, 5, 6, 7, 8, 9, 5, 1, 2, 4, 5, 9, 3 ] 

index 0 2 3 4 5 6 7 8 9
1                  

 

1 2

초기상태 : [ 9, 5, 6, 3, 1, 2, 0, 3, 5, 6, 7, 8, 9, 5, 1, 2, 4, 5, 9, 3 ] 

index 0 2 3 4 5 6 7 8 9
1 2                

 

2 2

초기상태 : [ 9, 5, 6, 3, 1, 2, 0, 3, 5, 6, 7, 8, 9, 5, 1, 2, 4, 5, 9, 3 ] 

index 0 2 3 4 5 6 7 8 9
1 2 2              

 

...

 

 

9 3

초기상태 : [ 9, 5, 6, 3, 1, 2, 0, 3, 5, 6, 7, 8, 9, 5, 1, 2, 4, 5, 9, 3 ] 

index 0 2 3 4 5 6 7 8 9
1 2 2 3 1 4 2 1 1 3

 

정렬하고자 하는 값들에 대해서 각 값의 빈도를 세면서(count) 배열에 입력하고 결과적으로 이 배열에서 차례대로 그 값을 빈도수만큼(배열값) 출력하면 된다.


index 0 2 3 4 5 6 7 8 9
1 2 2 3 1 4 2 1 1 3
출력 0 1 1 2 2 3 3 3   4 5 5 5 5 6 6  8 9 9 9

 

출력결과 >>  0 1 1 2 2 3 3 3 4 5 5 5 5 6 6 7 8 9 9 9