PHP两种快速排序算法实例
虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略。所以在此介绍递归排序和迭代排序。
递归法:
/**
*递归法实现的快速排序
*/
functionquicksort($seq)
{
$k=$seq[0];
$x=array();
$y=array();
for($i=1;$i<$_size;$i++){
if($seq[$i]<=$k){
$x[]=$seq[$i];
}else{
$y[]=$seq[$i];
}
}
$x=quicksort($x);
$y=quicksort($y);
returnarray_merge($x,array($k),$y);
}else{
return$seq;
}
}
迭代法:
/**
*迭代法的快速排序
*/
functionquicksortx(&$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;
}
使用:
/**
*产生一个随机数组
*/
for($i=0;$i<5;$i++){
$testArr[]=mt_rand(0,100);
}
var_dump($testArr);
var_dump(quicksort($testArr));
var_dump(quicksortx($testArr));