<?php
define('NUMBER_OF_TESTS', 5000);
function quicksort( $array )
{
$cur = 1;
$stack[1]['l'] = 0;
$stack[1]['r'] = count($array)-1;
do
{
$l = $stack[$cur]['l'];
$r = $stack[$cur]['r'];
$cur--;
do
{
$i = $l;
$j = $r;
$tmp = $array[(int)( ($l+$r)/2 )][1];
do
{
while ( $array[$i][1] < $tmp )
$i++;
while ( $tmp < $array[$j][1] )
$j--;
if ( $i <= $j )
{
$w = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $w;
$i++;
$j--;
}
} while ( $i <= $j );
if ( $i < $r )
{
$cur++;
$stack[$cur]['l'] = $i;
$stack[$cur]['r'] = $r;
}
$r = $j;
} while( $l < $r );
} while( $cur != 0 );
return $array;
}
function microtime_float()
{
}
function set(&$array)
{
for ($i = 0; $i<ARRAY_SIZE; $i++)
{
$array[$i][0] = "user ".$i;
$array[$i][1] = rand(10, 100); }
}
echo "<pre>";
// ----------
$time = microtime_float();
set($array);
$time = microtime_float()-$time;
$settime = ($time*NUMBER_OF_TESTS)/2;
// ----------
function usort_function($a, $b)
{
return ($a[1] == $b[1]) ? 0 : ($a[1] < $b[1]) ? -1 : 1;
}
$time = microtime_float();
for ($i = 1; $i<NUMBER_OF_TESTS; $i++)
{
if ($i&1)
set($array);
usort($array, 'usort_function'); }
$time = microtime_float()-$time;
echo "usort: ".$time."-".$settime."=<br>".($time-$settime)."<br>";
echo "<br>";
// ----------
$time = microtime_float();
for ($i = 1; $i<NUMBER_OF_TESTS; $i++)
{
if ($i&1)
set($array);
$array = quicksort($array);
}
$time = microtime_float()-$time;
echo "quicksort: ".$time."-".$settime."=<br>".($time-$settime)."<br>";
echo "</pre>";
?>
PD9waHAKc2V0X3RpbWVfbGltaXQoMCk7CmRlZmluZSgnTlVNQkVSX09GX1RFU1RTJywgNTAwMCk7CmRlZmluZSgnQVJSQVlfU0laRScsIDIwMCk7CgpmdW5jdGlvbiBxdWlja3NvcnQoICRhcnJheSApCnsKICRjdXIgPSAxOwogJHN0YWNrWzFdWydsJ10gPSAwOwogJHN0YWNrWzFdWydyJ10gPSBjb3VudCgkYXJyYXkpLTE7CiAKIGRvIAogewogICRsID0gJHN0YWNrWyRjdXJdWydsJ107CiAgJHIgPSAkc3RhY2tbJGN1cl1bJ3InXTsKICAkY3VyLS07CiAKICBkbwogIHsKICAgJGkgPSAkbDsKICAgJGogPSAkcjsKICAgJHRtcCA9ICRhcnJheVsoaW50KSggKCRsKyRyKS8yICldWzFdOwoKICAgZG8KICAgewogICAgd2hpbGUgKCAkYXJyYXlbJGldWzFdIDwgJHRtcCApCiAgICAgJGkrKzsKIAogICAgd2hpbGUgKCAkdG1wIDwgJGFycmF5WyRqXVsxXSApIAogICAgICRqLS07CgogICAgaWYgKCAkaSA8PSAkaiApCiAgICB7CiAgICAgJHcgPSAkYXJyYXlbJGldOwogICAgICRhcnJheVskaV0gPSAkYXJyYXlbJGpdOwogICAgICRhcnJheVskal0gPSAkdzsKIAogICAgICRpKys7CiAgICAgJGotLTsKICAgIH0KIAogICB9IHdoaWxlICggJGkgPD0gJGogKTsKIAogCiAgIGlmICggJGkgPCAkciApCiAgIHsKICAgICRjdXIrKzsKICAgICRzdGFja1skY3VyXVsnbCddID0gJGk7CiAgICAkc3RhY2tbJGN1cl1bJ3InXSA9ICRyOwogICB9CiAgICRyID0gJGo7CiAKICB9IHdoaWxlKCAkbCA8ICRyICk7CiAKIH0gd2hpbGUoICRjdXIgIT0gMCApOwogCiByZXR1cm4gJGFycmF5Owp9CiAKZnVuY3Rpb24gbWljcm90aW1lX2Zsb2F0KCkKewogcmV0dXJuIG1pY3JvdGltZSh0cnVlKTsKfQoKZnVuY3Rpb24gc2V0KCYkYXJyYXkpCnsKIGZvciAoJGkgPSAwOyAkaTxBUlJBWV9TSVpFOyAkaSsrKQogewogICRhcnJheVskaV1bMF0gPSAidXNlciAiLiRpOwogICRhcnJheVskaV1bMV0gPSByYW5kKDEwLCAxMDApOwogfQp9CgplY2hvICI8cHJlPiI7CgovLyAtLS0tLS0tLS0tCgokdGltZSA9IG1pY3JvdGltZV9mbG9hdCgpOwpzZXQoJGFycmF5KTsKJHRpbWUgPSBtaWNyb3RpbWVfZmxvYXQoKS0kdGltZTsKJHNldHRpbWUgPSAoJHRpbWUqTlVNQkVSX09GX1RFU1RTKS8yOwoKLy8gLS0tLS0tLS0tLQoKZnVuY3Rpb24gdXNvcnRfZnVuY3Rpb24oJGEsICRiKQp7CiByZXR1cm4gKCRhWzFdID09ICRiWzFdKSA/IDAgOiAoJGFbMV0gPCAkYlsxXSkgPyAtMSA6IDE7Cn0KCiR0aW1lID0gbWljcm90aW1lX2Zsb2F0KCk7CmZvciAoJGkgPSAxOyAkaTxOVU1CRVJfT0ZfVEVTVFM7ICRpKyspCnsKIGlmICgkaSYxKQogIHNldCgkYXJyYXkpOwogdXNvcnQoJGFycmF5LCAndXNvcnRfZnVuY3Rpb24nKTsKfQokdGltZSA9IG1pY3JvdGltZV9mbG9hdCgpLSR0aW1lOwplY2hvICJ1c29ydDogIi4kdGltZS4iLSIuJHNldHRpbWUuIj08YnI+Ii4oJHRpbWUtJHNldHRpbWUpLiI8YnI+IjsKCmVjaG8gIjxicj4iOwoKLy8gLS0tLS0tLS0tLQoKJHRpbWUgPSBtaWNyb3RpbWVfZmxvYXQoKTsKZm9yICgkaSA9IDE7ICRpPE5VTUJFUl9PRl9URVNUUzsgJGkrKykKewogaWYgKCRpJjEpCiAgc2V0KCRhcnJheSk7CiAkYXJyYXkgPSBxdWlja3NvcnQoJGFycmF5KTsKfQokdGltZSA9IG1pY3JvdGltZV9mbG9hdCgpLSR0aW1lOwplY2hvICJxdWlja3NvcnQ6ICIuJHRpbWUuIi0iLiRzZXR0aW1lLiI9PGJyPiIuKCR0aW1lLSRzZXR0aW1lKS4iPGJyPiI7CgplY2hvICI8L3ByZT4iOwo/Pg==