このコードは、要素の小さなセットに対しては正しい結果を生成しますが、大きな数のセット (100,000 要素) に対して結果が正しくない理由はわかりません。たとえば、これはcoursera の 100,000 整数テキスト ファイルです。Pythonコードからすでに正しい結果が得られています。しかし、なぜこの php コードが正しくないのかを突き止めたいと思います。出力は 2407905288 ではなく 2397819672 です。
$raw_input = file_get_contents($argv[1]);
$arr_input = explode("\n",trim($raw_input));
$count = 0.0;
function merge_sort($a)
{
if(count($a) <2) return $a;
$hl = count($a)/2;
return merge(merge_sort(array_slice($a, 0, $hl)), merge_sort(array_slice($a, $hl)));
}
function merge($l, $r)
{
global $count;
$result = array();
$i = $j = 0;
while($i < sizeof($l) && $j < sizeof($r))
{
if($l[$i] < $r[$j])
{
$result[] =$l[$i];
$i++;
}
else
{
$result[] =$r[$j];
$count+= (sizeof($l) - $i);
$j++;
}
}
while($i <sizeof($l))
{
$result[] = $l[$i];
$i++;
}
while($j <sizeof($r))
{
$result[] = $r[$j];
$j++;
}
return $result;
}
$sorted = merge_sort($arr_input);
print $count . "\n";