でソートを数える、簡単なカウント並べ替え:私は線形時間を使用してソートするいくつかのデータを持っているPHPプロジェクトでPHP
$ar = array(7, 2, 0, 3, 8, 0, 12, 7, 6, 7);
$count = array();
foreach ($ar as $v)
$count[$v]++;
$sorted = array();
foreach ($count as $v => $c)
for ($i = 0; $i < $c; $i++)
$sorted[] = $v;
問題は、明らかに上記が動作しないということです。 php配列は、配列よりもハッシュマップのように機能します。コードは、最終ループの前にksort($count)
を挿入することによって機能させることができますが、ksort
はO(nlogn)
で実行され、ポイント全体が破壊されます。
PHPで線形時間ソートを行う方法はありますか?おそらくarray()
にいくつかのパラメタを使用して、またはいくつかの全く異なる構造ですか?
その配列にアイテムが何回出現するかに基づいて配列をソートしようとしていますか?だからあなたの上記の例では "7"が他のどの数字よりも(3)回多く発生するので、最初になるでしょうか? –
上記は '$ sorted'を$ arのソート版として残しています。これは 'array(0,0,2,3,6,7,7,7,8,12)'です。現在、 'array(7,7,7,2,0,0,3,8,12,6)'を与えています。 –
スピードは問題ではありませんが、リニアに実行する必要がありますか? – hakre