学习了一下快排,用PHP尝试写了一下,不足之处望指正。
<?php
$n = 500;
$numbers = array();
//随机生成500个数,数组索引从1开始
for($i=1; $i<=$n; $i++){
$rand = mt_rand(1,$n);
$numbers[$i] = $rand;
}
//快速排序,$left,$right均为数组索引
function quickSort($left,$right,&$numbers){
if( $left>$right ){
return;
}
$temp = $numbers[$left]; //基准数
$i = $left;
$j = $right;
while($i != $j){
//从右往左找
while( $numbers[$j]>=$temp && $i<$j ){
$j--;
}
//从左往右找
while( $numbers[$i]<=$temp && $i<$j ){
$i++;
}
//交换两个数在数组中的位置
if( $i<$j ){
$t = $numbers[$i];
$numbers[$i] = $numbers[$j];
$numbers[$j] = $t;
}
}
//基准数归位
$numbers[$left] = $numbers[$i];
$numbers[$i] = $temp;
quickSort($left,$i-1,$numbers);
quickSort($i+1,$right,$numbers);
}
quickSort(1,$n,$numbers);
echo '<pre>';
var_dump($numbers);
?>