[C言語]伯俊10989:ソート数3



https://www.cs.miami.edu/home/burt/learning/Csc517.091/workbook/countingsort.htmlカウントソート例
https://soobarkbar.tistory.com/101カウント・ソートについて
上記の例としては、5 2 3 1 4 4 5 1 7の数字がある.ここでは各数字の周波数を計算し,配列に入れる.
0 1 2 3 4 5 6 7
0 2 2 1 2 2 0 1
これで周波数を求めることができます.そしてこの周波数をもとに0で順番探索をすればよい.
0は周波数0、パス
1は2回の出力周波数が2,1であることを示す
2は2回の出力周波数が2と2であることを示す
3の出力周波数は1、3回
4の出力周波数は2、4回
5は2回の出力周波数が2、5であることを示す
6の周波数は0、パス
7の出力周波数は1、7
習ったように積算を求める方式で行うことも可能ですが、この問題でメモリを制限できないことを確認しました.
だから上記の方法で行います.
https://kindload-save.tistory.com/49のアイデアを参照してください

に答える

#include <stdio.h>

int arr[10001];
int main()
{
    int n, j;
    int ins;
    scanf("%d", &n);
    int i = 1;
    while(i <= n)
    {
        scanf("%d", &ins);
        arr[ins]++;
        i++;
    }
    i = 1;
    while(i <= 10000)
    {
        j = 1;
        while(j <= arr[i])
        {
            printf("%d\n", i);
            j++;
        }
        i++;
    }
}