本文实例分析了php冒泡排序与快速排序算法。分享给大家供大家参考,具体如下:
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
$a = array ( '3' , '8' , '1' , '4' , '11' , '7' );
print_r( $a );
$len = count ( $a );
//从小到大
for ( $i =1; $i < $len ; $i ++)
{
for ( $j = $len -1; $j >= $i ; $j --)
if ( $a [ $j ]< $a [ $j -1])
{ //如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
$x = $a [ $j ];
$a [ $j ]= $a [ $j -1];
$a [ $j -1]= $x ;
}
}
print_r( $a );j
//另一种方法 从小到大
$b = array ( '4' , '3' , '8' , '9' , '2' , '1' );
$len = count ( $b );
for ( $k =1; $k < $len ; $k ++)
{
for ( $j = $len -1, $i =0; $i < $len - $k ; $i ++, $j --)
if ( $b [ $j ]< $b [ $j -1]){
//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
$tmp = $b [ $j ];
$b [ $j ]= $b [ $j -1];
$b [ $j -1]= $tmp ;
}
print_r( $b );
echo "
";
}
//下面的这个执行效率更高
function maopao( $arr )
{
$len = count ( $arr );
for ( $i =1; $i < $len ; $i ++) //最多做n-1趟排序
{
$flag = false; //本趟排序开始前,交换标志应为假
for ( $j = $len -1; $j >= $i ; $j --)
{
if ( $arr [ $j ]< $arr [ $j -1]) //交换记录
{ //如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
$x = $arr [ $j ];
$arr [ $j ]= $arr [ $j -1];
$arr [ $j -1]= $x ;
$flag = true; //发生了交换,故将交换标志置为真
}
}
if (! $flag ) //本趟排序未发生交换,提前终止算法
return $arr ;
}
}
$shuz = array ( '2' , '4' , '1' , '8' , '5' );
$bb = maopao( $shuz );
print_r( $bb );
// 快速排序
function kuaisu( $arr ){
$len = count ( $arr );
if ( $len <= 1){
return $arr ;
}
$key = $arr [0];
$left_arr = array ();
$right_arr = array ();
for ( $i =1; $i < $len ; $i ++){
if ( $arr [ $i ] <= $key ){
$left_arr [] = $arr [ $i ];
} else {
$right_arr [] = $arr [ $i ];
}
}
$left_arr = kuaisu( $left_arr );
$right_arr = kuaisu( $right_arr );
return array_merge ( $left_arr , array ( $key ), $right_arr );
}
$arr = array (23,98,54,2,9,62,34);
print_r(kuaisu( $arr ));
|
希望本文所述对大家php程序设计有所帮助。