我尝试在 PHP 中编写一个涉及小数组的基本合并排序,但问题是它需要大约一分钟左右的时间来执行,并返回:
致命错误:允许的内存大小 536870912 字节已耗尽(已尝试
分配 35 个字节)在 /Users/web/www/merge.php 第 39 行
有谁知道代码可能出问题的地方(如果有的话)?我已经盯着这个看了一个小时了。
<?php
$array = array(8,1,2,5,6,7);
print_array($array);
merge_sort($array);
print_array($array);
function merge_sort(&$list){
if( count($list) <= 1 ){
return $list;
}
$left = array();
$right = array();
$middle = (int) ( count($list)/2 );
// Make left
for( $i=0; $i < $middle; $i++ ){
$left[] = $list[$i];
}
// Make right
for( $i = $middle; $i < count($list); $i++ ){
$right[] = $list[$i];
}
// Merge sort left & right
merge_sort($left);
merge_sort($right);
// Merge left & right
return merge($left, $right);
}
function merge(&$left, &$right){
$result = array();
while(count($left) > 0 || count(right) > 0){
if(count($left) > 0 && count(right) > 0){
if($left[0] <= $right[0]){
$result[] = array_shift($left);
} else {
$result[] = array_shift($right);
}
} elseif (count($left) > 0){
$result[] = array_shift($left);
} elseif (count($right) > 0){
$result[] = array_shift($right);
}
}
print_array($result);exit;
return $result;
}
function print_array($array){
echo "<pre>";
print_r($array);
echo "<br/>";
echo "</pre>";
}
?>
In your merge
函数,你调用 count onright
代替$right
。 PHP 假定这是一个字符串常量(至少在 5.3.9 中),并且当转换为始终具有一个元素的数组时。所以count(right)
始终为一,并且您永远不会退出第一次合并。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)