虽然在PHP这样的web应用开发中,我们不是太强调排序的重要性,因为PHP自身已经带了例如sort()等这样强大的排序函数,但是在一些重要的场合,例如某些高并发的场合,我想排序算法的影响已经不能忽略。所以在此介绍递归排序和迭代排序。
递归法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
/**
* 递归法实现的快速排序
*/
function quicksort( $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 );
return array_merge ( $x , array ( $k ), $y );
} else {
return $seq ;
}
}
|
迭代法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
/**
* 迭代法的快速排序
*/
function quicksortx(& $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 ;
}
|
使用:
1
2
3
4
5
6
7
8
9
10
|
/**
*产生一个随机数组
*/
for ( $i =0; $i <5; $i ++){
$testArr []=mt_rand(0,100);
}
var_dump( $testArr );
var_dump(quicksort( $testArr ));
var_dump(quicksortx( $testArr ));
|