시간복잡도가 n이나, 나오는 수가 한정되어 있을때 사용하는게 좋다.
#include <stdio.h>
int main(){
int n = 20;
int arr[20] = { 1,3,2,4,3,2,1,5,4,4,3,2,3,4,5,5,1,1,1 };
// 특정 경우의 수일때, nlogn 정렬들 (퀵소트, 힙소트, 머지소트) 보다 강력하다
// 시간복잡도가 n이 나옴
// 조건은 보통 "몇 이하의 자연수들로만 나올때"
int count[6] = { 0, };
// 카운트 배열의 경우 초기화는 반드시 필수 (memset이나 위 명령어 사용);
for (int i = 0; i < n; i++){
count[arr[i]]++;
// 해당 인덱스에 값을 늘려준다 (카운팅함)
}
// 출력시 아래와 같이 한다.
for (int i = 1; i <= 5; i++){
while (count[i]--){
printf("%d ", i);
}
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[알고리즘] 에라토스테네스의 체 (C++) - 소수 찾기 (0) | 2020.08.09 |
---|---|
[알고리즘] Sort 함수 이해 (0) | 2020.07.12 |
[알고리즘] 퀵소트 QuickSort (0) | 2020.07.11 |
[알고리즘] 병합정렬 MergeSort (0) | 2020.07.10 |
[알고리즘] 선택정렬 SelectionSort (0) | 2020.07.08 |