2016-04-23 12 views
1

C言語で配列要素を頻度別に並べ替えるアルゴリズムを探しています。例えば:それらは同じ周波数の他のものとグループ化されているように各要素の頻度に基づいて配列要素を並べ替える

array[10] = {1, 1, 1, 5, 2, 3, 3, 3, 3, 4}; //initial array 

array[10] = {5, 4, 2, 1, 1, 1, 3, 3, 3, 3}; //post-sorting array 

同様の周波数(上記の例では5,4、及び2)との要素の順序は限り、重要ではありません。

私はTHISを見ましたが、それはC言語ではなく私が知らないmatlabにあり、ライブラリ関数に大きく依存しています。する。

答えて

1

typedef値と頻度を含む構造体。 10個の配列を作成して頻度表を作成し、最初に表数を0に設定します。

ソース配列を反復し、テーブルエントリがまだ存在しない値が見つかった場合はカウントを組み込みます。

頻度テーブルを昇順でソートするには、qsortを使用します。

ソートされた頻度表を繰り返し、移動しながら配列を構築し、出力します。必要に応じて、入力配列を出力配列として使用できます。

qsort lib関数を使用しない場合は、独自のソートを使用します。

2

要素の要素と頻度を含む構造体を作成することができます。また、freqフィールドを増やすだけで要素を配列に挿入するときに重複を避けることもできます。例えば

:次いで

typedef struct elem{ 
    int value; 
    int freq; 
} element; 

多分qsort

ようなアルゴリズムを用いて配列 element[N]周波数ごとに、ソート
関連する問題