사전 조건
- 배열의 인자 값의 범위가 작을 때 적합하다.
동작 방식
- 배열의 인자를 하나씩 꺼낸 인자값과 새로운 배열의 인덱스 값이 같은 새로운 배열의 인자값을 1식 증가시켜준다.
장점
- 배열의 인자 값의 범위가 적을 경우 매우 빠른 속도를 낼 수 있다.
- 그러나 배열의 크기가 작고 인자값의 크기가 큰 경우 부적합 할 수 있다.
시간 복잡도
O(n) - 최대 값이 주어졌다면
- 배열의 인자 값의 갯수 만큼 업데이트 하기 때문에 O(n)
- 새로운 배열의 인자값들의 개수(k)를 합해야 하기 때문에 O(k)
- 원소들을 새로운 배열에 넣어야 하기 때문에 O(n)
- 따라서 O(2n + k) 간단하게 O(2n + k)
- 그러나 k값 즉 인자의 최대 값이 작다면 O(n)으로 표현 할 수 있다.
python 구현
'''
@ Author : bsh0817
@ Created : 2020. 01. 28
@ Update : 2020. 01. 28
@ Description : Counting sort (계수 정렬)
'''
def fn_counting_sort(list_input, int_max_value):
'''
@Description: Counting sort (계수 정렬)
@Arguments Example
# 0~10 사이의 정수라 가정
list_input = [10, 5, 1, 8, 4, 3, 2, 9, 6, 7]
'''
list_result = [0] * (int_max_value + 1)
responce = []
for int_value in list_input:
list_result[int_value] += 1
for int_index in range(int_max_value + 1):
for _ in range(list_result[int_index]):
responce.append(int_index)
return responce
if __name__ == "__main__":
list_fn_counting_sort_param = [1, 9, 1, 2, 7, 3, 2, 8, 6, 1, 10, 10, 5, 6, 5, 9]
print(fn_counting_sort(list_fn_counting_sort_param, 10))