我尝试在PHP中编写一个基本的归并排序,涉及一个小数组,但问题是它需要大约一分钟的时间才能执行,并返回以下内容:
“致命错误:在/Users/web/www/merge.php的第39行尝试分配35个字节时,已耗尽536870912字节的允许内存大小。”
如果有人知道代码可能出了什么问题(如果有的话),请告诉我。我已经盯着这个问题看了一个小时了。
“致命错误:在/Users/web/www/merge.php的第39行尝试分配35个字节时,已耗尽536870912字节的允许内存大小。”
如果有人知道代码可能出了什么问题(如果有的话),请告诉我。我已经盯着这个问题看了一个小时了。
<?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>";
}
?>