
계수 정렬에 대해 알아보자.
얻어갈 지식
- 계수 정렬 이해
계수 정렬
계수 정렬은 배열의 인덱스에 숫자의 개수를 카운팅하는 방식으로 정렬한다.
예를 들어, a = [ 1, 1, 0 ]라는 배열이 있으면 배열 크기가 2이며 모든 요소가 0인 배열 b를 선언한 뒤
a의 첫 번째 요소가 1이므로 b[1] += 1
a의 두 번째 요소가 1이므로 다시 b[1] += 1
a의 마지막 요소가 0이므로 b[0] += 1
해당 과정이 끝나면 배열 b에 있는 0을 제외한 모든 요소를 순서대로 출력하면 된다.
정수(-, 0, +)와 문자가 들어있을 때 가능하며 실수가 들어있을 경우(3/2, 0.123 등) 계수 정렬이 어렵다.
코드로 작성
def count_sort(arr):
count_arr = [0] * (max(arr) + 1)
output_arr = [0] * len(arr)
idx = 0
for i in arr:
count_arr[i] += 1
for i in range(len(count_arr)):
for j in range(count_arr[i]):
output_arr[idx] = i
idx += 1
return output_arr
시간 복잡도와 보조 공간
- 시간 복잡도는 O(N)이다.
- 보조 공간은 주어지는 어레이의 크기에 비례해서 필요하다.
수의 개수가 작으며 그 수의 차가 클수록 매우 비효율적인데 이를테면, 1과 10000이 있을 경우 단 두 개의 수를 정렬하는데 필요한 배열의 크기가 10000이 되기 때문이다.
정렬 알고리즘
정렬 알고리즘 정렬 데이터를 특정한 기준에 따라서 순서대로 나열하는 것을 말함
velog.io
https://www.geeksforgeeks.org/counting-sort/
Counting Sort - GeeksforGeeks
Counting sort is a sorting technique based on keys between a specific range. It works by counting the number of objects having distinct key values
www.geeksforgeeks.org
'알고리즘, 자료구조' 카테고리의 다른 글
그래프 ( Graph ) (0) | 2022.06.20 |
---|---|
검색 알고리즘 (0) | 2022.06.20 |
퀵 정렬 (0) | 2022.05.30 |
병합 정렬 (0) | 2022.05.28 |
삽입 정렬 (0) | 2022.05.28 |