|
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
|
長さが10の配列があるとする
int n,j; int i[10]; 以下の中身は便宜上0以上5以下の整数とする この時中身は以下の表の通りとする
この時配列の中の数の最大は5であるので以下の長さの配列を用意する int bin[5 + 1];
i配列の中の数字のカウントに使用します i[0]が5なのでbin[5]++ i[1]が3なのでbin[3]++ i[2]が2なのでbin[2]++ ~~~~~~~~~~~~~~~~~ i[8]が3なのでbin[3]++ i[9]が2なのでbin[2]++ とするとbin配列は以下のようになります
あとは n = 0; j = 0; while(1){ for(;bin[n] > 0;bin[n] --){ i[j] = n; j ++; } n++; if(n >= 6)break; } とすれば小さい順にソート完了 ちなみに欠点は最大値が大きいほどメモリを消費する PR |
||||||||||||||||||||||||||||||||||||||||||||
|
|
|
トラックバックURL
|
