function quick($a) {
if (count($a) < 2) return $a;
$l = [];
$r = [];
$pivot = $a[0];
foreach ($a as $val) {
if ($val > $pivot) {
$r[] = $val;
} else {
$l[] = $val;
}
}
return array_merge(quick($l), [$pivot], quick($r));
}
print_r(quick($a));
我收到此错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 72 bytes) in /Applications/XAMPP/xamppfiles/htdocs/sort.php on line 46
第46行是$l[] = $val;
答案 0 :(得分:4)
非常简单。你得到了几乎无限的递归。
原因是您没有从子阵列中排除枢轴点。所以$l
将始终包含它。如果$pivot
不是数组中的最小值,您将使用空$r
数组无限递归,并将$a
复制到$l
...
相反,您需要调整if条件并查看数据透视表键:
$pivot = $a[0];
foreach ($a as $key => $val) {
if ($key === 0) {
continue; // pivot
} elseif ($val > $pivot) {
$r[] = $val;
} else {
$l[] = $val;
}
}