<?php

/*
 * 快速排序
 */
set_time_limit(0);
header("Content-Type:text/html;charset=utf-8");
 
$dataLen=20001;
 
$data=array();
$i=0;
//make data
srand(time());
for($i=0; $i < $dataLen; $i++){
$data[$i] = rand();
}
 
//sort
$time1=explode(' ',microtime());
quicksort($data, 0, $dataLen-1);
$time2=explode(' ',microtime());
echo '耗时:'. (($time2[1]-$time1[1])+($time2[0]-$time1[0])).'<br />';
//输出结果
for ( $i = 0; $i < $dataLen; $i++){
echo $data[$i] ."\t";
}
 
echo '<br />消耗内存:';
echo memory_get_peak_usage() / (1024*1024) + memory_get_usage() / (1024*1024);
echo 'M';
 
 
/*
 * 划分
 */
 
function partition(&$n, $left, $right)
{
$lo;
$hi;
$pivot;
$t;
 
$pivot = $n[$left];
$lo = $left - 1;
$hi = $right + 1;
 
while ($lo + 1 != $hi)
{
if ($n[$lo + 1] <= $pivot){
$lo++;
}
else if ($n[$hi - 1] > $pivot){
$hi--;
}
else
{
$t = $n[$lo + 1];
$n[++$lo] = $n[$hi - 1];
$n[--$hi] = $t;
}
}
 
$n[$left] = $n[$lo];
$n[$lo] = $pivot;
 
return $lo;
}
 
/*
 * 快递排序
 */
 
function quicksort(&$n, $left, $right)
{
$dp;
if ($left < $right)
{
$dp = partition($n, $left, $right);
 
quicksort($n, $left, $dp - 1);
 
quicksort($n, $dp + 1, $right);
}
}