此代码为小组元素生成正确的结果,但我不知道为什么结果对于大组数字(100,000个元素)不正确。例如,这是the 100,000 integers text file from coursera。我已经从我的python代码得到了正确的结果。但我想弄清楚为什么这个PHP代码不正确。输出是2397819672 intead of 2407905288。
$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";
答案 0 :(得分:1)
我敢打赌你在PHP中达到了最大整数值。
根据官方文件:
http://php.net/manual/en/language.types.integer.php
The size of an integer is platform-dependent, although a maximum value of about two billion is the usual value (that's 32 bits signed). 64-bit platforms usually have a maximum value of about 9E18. PHP does not support unsigned integers. Integer size can be determined using the constant PHP_INT_SIZE, and maximum value using the constant PHP_INT_MAX since PHP 4.4.0 and PHP 5.0.5.
所以你可以改变int_max常量。
未经测试的事情:将其用作字符串。
答案 1 :(得分:1)
我不认为这是一个与最大整数值相关的问题,因为我在python中遇到过这个问题。 我得到了错误的答案2397819672(事实上,如果我的代码的最后一部分是
,我将通过google这个数字到达此页面:)f = open('IntegerArray.txt')
unsorted = list()
for line in f:
unsorted.append(line)
merge_sort(unsorted)
如果我的代码的最后一部分是
,我会得到正确答案2407905288f = open('IntegerArray.txt')
unsorted = list()
for line in f:
unsorted.append(int(line))
merge_sort(unsorted)
你能找出区别吗?这就是答案所在。
答案 2 :(得分:1)
与上面的答案类似,我使用的是Python。错误是您的代码可能正在进行字符串比较而不是int比较。例如,在Python中,&#33; 33&#39; &LT; &#39; 4&#39;是真的。