本文实例分析了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程序设计有所帮助。