/**
* Recursive method to achieve the fast ordering
* @param $seq
* @return Array
*/
function Quicksort ($SEQ)
{
if (count ($seq) > 1) {
$k = $seq [0];
$x = Array ();
$y = Array ();
$_size = count ($SEQ); Do does use COUNT ($SEQ) in the loop for.
for ($i = 1; $i < $_size; $i + +) {
if ($seq [$i] <= $k) {
$x [] = $seq [$i];
} else {
$y [] = $seq [$i];
}
}
$x = Quicksort ($x);
$y = Quicksort ($y);
Return Array_merge ($x, Array ($k), $y);
} else {
return $seq;
}
}
/** with iterative implementation
* @param $seq
* @return Array
*/
Function Quicksortx (& $SEQ)
{
$stack = Array ($SEQ);
$sort = Array ();
while ($stack) {
$arr = Array_pop ($stack);
if (count ($arr) <= 1) {
if (count ($arr) = 1) {
$sort [] = & $arr [0];
}
Continue
}
$k = $arr [0];
$x = Array ();
$y = Array ();
$_size = count ($arr);
for ($i = 1; $i < $_size; $i + +) {
if ($arr [$i] <= $k) {
$x [] = & $arr [$i];
} else {
$y [] = & $arr [$i];
}
}
!empty ($y) && Array_push ($stack, $y);
Array_push ($stack, Array ($arr [0]));
!empty ($x) && Array_push ($stack, $x);
}
return $sort;
}
$TESTARR = Array (5545, 5, 6, 7675, 100, 9, 233, 566, 789, 456, 23, 55, 7, 4, 343, 564, 5, 45657, 8, 998, 9, 34, 34, 55, 6, 5, 6433, 67, 6, 6766, 4, 2, 42, 25634, 34343, 3, 3, 454, 4, 65, 6678, 57, 5455);
For ($i =0 $i <20; $i + +) {
$TESTARR []=mt_rand (0,10000);
}
Var_dump ($TESTARR);
echo Count ($TESTARR). ' <br> ';
$start =microtime ();
echo Count (quicksort ($TESTARR)). ' <br> ';
Echo microtime ()-$start. ' <br> ';
Var_dump (Quicksort ($TESTARR));
Echo '------------------------------------------------------------------------<br> ';
echo Count ($TESTARR). ' <br> ';
$start =microtime ();
echo Count (Quicksortx ($TESTARR)). ' <br> ';
Echo microtime ()-$start. ' <br> ';
Var_dump (Quicksortx ($TESTARR));