티스토리 뷰
각각의 자릿수 별로 정렬하여 완벽히 정렬된 배열을 만들어내는 알고리즘
#define N 10
#define K 40
#define D 2
int data[N] = {40, 6, 1, 9, 3, 5, 5, 3, 6, 6};
int cnt[K + 2];
int ans[N];
int main(void)
{
radixSort();
}
void radixSort(void)
{
int i, j;
for (i = 0; i < D; i++) // 작은 자리수부터 계산하는 이뉴는 stable sort를 위해
{
countingSort(i);
for (j = 0; j < N; j++)
data[j] = ans[j];
}
}
void countingSort(int digit)
{
int i;
int t1 = (int)pow(10.0, digit); // 10^digit
int t2 = t1 * 10; // 10^(digit+1)
for (i = 0; i <= K; i++)
{
cnt[i] = 0;
}
for (i = 0; i < N; i++)
{
cnt[data[i] % t2]++;
}
for (i = 1; i <= K; i++)
{
cnt[i] += cnt[i - 1];
}
for (i = N - 1; i >= 0; i--)
{
ans[--cnt[data[i] % t2]] = data[i];
}
}
- 시간복잡도 : O(D(N+K))
- 공간복잡도 : O(N+K)
'공부 > SW Professional' 카테고리의 다른 글
[알고리즘] 계수 정렬(counting 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
링크