Quicksort lohnt sich nur bei vielen Elementen, und wenn du ein paar tausend Elemente sortierst, dann ist es ein Unterschied, ob du die alle doppelt im Speicher hast oder nicht.
Andererseits: Die ganzen Array-Funktionen von PHP sind genauso schrottig, da sollte man nicht erwarten, dass es jemand besser macht, der es gerade erst lernt. Irgendwie sind diese Funktionen so ausgelegt, dass man möglichst ineffizient programmiert. Andererseits möchte man vllt. unabhängig von der Programmiersprache auch mal wissen, wie man einen bestimmten Algorithmus in-place hinbekommt.
<?php
function quicksortimpl(array &$arr, $beg, $end)
{
if($end - $beg <= 1)
return;
$pivot = $arr[$beg];
$pivotpos = $beg;
for($i = $end-1; $i != $pivotpos; )
{
if($arr[$i] < $pivot)
{
$arr[$pivotpos] = $arr[$i];
$arr[$i] = $arr[++$pivotpos];
$arr[$pivotpos] = $pivot;
}
else
--$i;
}
quicksortimpl(&$arr, $beg, $pivotpos);
quicksortimpl(&$arr, $pivotpos + 1, $end);
}
function &quicksort(array $arr)
{
quicksortimpl(&$arr, 0, count($arr));
return $arr;
}
?>
Alles anzeigen
Dann kann man entweder quicksort($array) oder quicksort(&$array) verwenden, je nachdem, ob man die unsortierte Version behalten möchte.
Hast schon Recht, dass das in der PHP-Praxis egal ist, aber man will ja Algorithmik lernen.