[이코테] CHAPTER 06 정렬 - 계수 정렬
계수 정렬 (Count Sort)
: 특정한 조건이 부합할 때만 사용할 수 있지만, 매우 빠른 알고리즘( 일반적으로 가장 큰 데이터와 가장 작은 데이터의 차이가 1,000,000을 넘지 않을 때 효과적으로 사용할 수 있다.)
별도의 리스트를 선언하고 그 안에 정보를 담는다.
데이터를 하나씩 확인하며 데이터의 값과 동일한 인덱스의 데이터를 1씩 증가시키면 계수 정렬이 완성된다.
ex)
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 1 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 2 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 2 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 2 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 2 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
1 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 2 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 2 | 1 | 1 | 1 | 2 | 1 | 1 | 1 | 2 |
7 5 9 0 3 1 6 2 9 1 4 8 0 5 2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
2 | 2 | 2 | 1 | 1 | 2 | 1 | 1 | 1 | 2 |
따라서 출력 결과는 0은 2번, 1은 2번,이런식으로 출력된다.
0 0 1 1 2 2 3 4 5 5 6 7 8 9 9
array = [7,5,9,0,3,1,6,2,9,1,4,8,0,5,2]
#리스트 선언( 모든 값은 0으로 초기화)
count = [0] * (max(array)+1)
for i in range(len(array)):
count[array[i]]+=1
for i in range(len(count)):
for j in range(count[i]):
print(i,end=' ')
데이터의 개수는 N개, 데이터 중 최대값의 크기를 K => 시간 복잡도 O( N+ K )
'Study Platform📚 > (알고리즘)- [이코테] 이것이 코딩테스트다 정리' 카테고리의 다른 글
[이코테] CHAPTER 05 DFS/BFS - BFS(deque 메서드) - Python(파이썬),Java(자바) (0) | 2022.05.18 |
---|---|
[이코테]CHAPTER 05 DFS/BFS - 스택, 큐, 재귀함수, DFS (0) | 2022.05.17 |
[이코테]CHAPTER 06 정렬 - 퀵정렬- 파이썬(Python) (0) | 2022.05.15 |
[이코테] CHAPTER 07 이진탐색- 순차 탐색, 이분탐색/이진탐색, 이진탐색트리 (0) | 2022.05.13 |
[이코테] CHAPTER 03 그리디(Greedy) (0) | 2022.05.11 |