<?php
function swap(&$arr, $i, $j)
{
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
function quicksort(&$arr, $left, $right)
{
$pivot = $arr[($left + $right) >> 1];
$i = $left;
$j = $right;
while ($i <= $j)
{
while ($arr[$i] < $pivot)
{
$i++;
}
while ($arr[$j] > $pivot)
{
$j--;
}
if ($i <= $j)
{
swap($arr, $i++, $j--);
}
}
if ($left < $j)
{
quicksort($arr, $left, $j);
}
if ($i < $right)
{
quicksort($arr, $i, $right);
}
}
function qsort($len)
{
// Sample data
$arr = array();
for ($i = 0 ; $i < $len ; $i++)
{
$arr[$i] = floor(rand(0, $len));
if ($i % 2 == 0)
{
$arr[$i] = -1 * $arr[$i];
}
}
$start = microtime(true);
quicksort($arr, 0, count($arr) - 1);
$diff = microtime(true) - $start;
for ($i = 1 ; $i < count($arr) ; $i++)
{
if ($arr[$i-1] > $arr[$i])
{
die("failed to sort!!");
}
}
return $diff;
}
$len = 100;
$min = 0;
for ($i = 0 ; $i < 3 ; $i++)
{
$time = qsort($len);
if ($time < $min)
{
$min = $time;
}
}
echo "PHP quicksort: " . round($min*1000) . " ms (" . $len . ")\n" ;
- Output for 4.3.0 - 4.3.11, 4.4.0 - 4.4.9, 5.0.0 - 5.0.5, 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.26, 7.3.0 - 7.3.13, 7.4.0 - 7.4.1
- PHP quicksort: 0 ms (100)
preferences:
212.71 ms | 404 KiB | 325 Q