lor*_*ier 1 php sorting algorithm
我一直在尝试在php下实现合并排序.但似乎不成功:(找不到错误的来源.非常感谢任何一种帮助!
function merge_sort(&$input, $start, $end) {
if($start < $end) {
$mid = (int) floor($start + $end / 2);
merge_sort($input, $start, $mid);
merge_sort($input, $mid + 1, $end);
merge($input, $start, $mid, $end);
}
}
function merge(&$input, $p, $q, $r) {
$a = $q - $p + 1;
$b = $r - $q;
for($i = $p;$i <= $q;$i++) {
$arr1[] = $input[$i];
}
for($i = $q+1;$i <= $r;$i++) {
$arr2[] = $input[$i];
}
$c = $d = 0;
for($i = $p; $i <= $r; $i++) {
$s = $arr1[$c];
$t = $arr2[$d];
if($a && (($s <= $t) || !$b)) {
$input[$i] = $s;
$a--;$c++;
} else if($b) {
$input[$i] = $t;
$b--;$d++;
}
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
这是信息xdebug扔回:
Fatal error: Maximum function nesting level of '100' reached, aborting!
Run Code Online (Sandbox Code Playgroud)
要在合并排序上达到100的嵌套级别,您需要具有大小2^100(大约1e30)的输入数组,这是不可能的.我怀疑你的递归是不正确的.例如,你写的$start + $end / 2而不是($start + $end) / 2.