티스토리 뷰
각각의 원소가 몇 개 존재하는지 counting 한 후 개수를 센 배열을 통해서 정렬된 배열을 뽑아내는 방법
제한사항
- 데이터는 양의 정수여야 함
- 데이터 범위(0 ~ K)의 제한이 있음
#define N 10
#define K 40
int data[N] = {40, 6, 1, 9, 3, 5, 5, 3, 6, 6};
int cnt[K + 2];
int ans[N];
int main(void)
{
int i;
for (i = 0; i < N; i++)
{
cnt[data[i]]++;
}
for (i = 1; i <= K; i++)
{
cnt[i] += cnt[i - 1];
}
for (i = N - 1; i >= 0; i--)
{
ans[--cnt[data[i]]] = data[i]; // 뒤에서부터 계산하는 이유는 stable sort를 위해
}
for (i = 0; i < N; i++)
{
printf("%d ", ans[i]);
}
return 0;
}
- 시간복잡도 : O(N+K)
- 공간복잡도 : O(N+K)
'공부 > SW Professional' 카테고리의 다른 글
[알고리즘] 기수 정렬(radix sort) (0) | 2021.05.25 |
---|---|
[알고리즘] 힙 정렬(heap sort) (0) | 2021.05.25 |
[알고리즘] 퀵 정렬(quick sort) (0) | 2021.05.25 |
[알고리즘] 합병 정렬(merge sort) (0) | 2021.05.25 |
[알고리즘] 삽입 정렬(insertion sort) (0) | 2021.05.25 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크