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
|
$array = array (2,3,5,6,9,8,1); //冒泡排序思想,前后元素比较 function sort_bulldle( $array ){ $num = count ( $array ); for ( $i =0; $i < $num ; $i ++){ $tmp = $array [ $i ]; for ( $j = $i -1; $j >=0; $j --) { if ( $tmp < $array [ $j ]) { $arr [ $j +1] = $arr [ $j ]; $arr [ $j ] = $tmp ; } else { break ; } } } return $array ; } //插入排序思想,就是从第二个元素开始,到最后一个元素都是这个需要排序的元素 function sort_bulldle( $arr ){ for ( $i =1, $len = count ( $arr ); $i < $len ; $i ++) { $tmp = $arr [ $i ]; for ( $j = $i -1; $j >=0; $j --) { if ( $tmp < $arr [ $j ]) { $arr [ $j +1] = $arr [ $j ]; $arr [ $j ] = $tmp ; } else { break ; } } } return $arr ; } //快速排序,找一个基准点把数组分成两组比较 function sort_bulldle( $array ){ $num = count ( $array ); if ( $num <=1) { return $array ; } $base_num = $array [0]; $left_array = array (); $right_array = array (); for ( $i =1; $i < $num ; $i ++) { if ( $base_num > $array [ $i ]) { $left_array [] = $array [ $i ]; } else { $right_array [] = $array [ $i ]; } } $left_array = sort_bulldle( $left_array ); $right_array = sort_bulldle( $right_array ); return array_merge ( $left_array , array ( $base_num ), $right_array ); } |
本文实例总结了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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
class bevin{ public $public = 'public' ; private $private = 'private' ; protected $protected = 'protected' ; //final $final = 'final'; static $static = 'static' ; function __construct(){ $this -> protected = 'change private' ; } public function setValue( $a ){ self:: $static = $a ; } public function getValue(){ echo $this -> private ; } function __destruct(){ echo 'asdfsadf' ; } } class paixu { // 基本排序 public function t_sortArray( $array ) { if ( is_array ( $array ) && count ( $array )>1) { for ( $i =0; $i < count ( $array ); $i ++) { for ( $j =( $i +1); $j < count ( $array ); $j ++) { $temp = $array [ $i ]; if ( $array [ $j ]< $array [ $i ]) { $array [ $i ] = $array [ $j ]; $array [ $j ] = $temp ; } } } return $array ; } else { return $array ; } } // 冒泡排序 public function c_sortArray( $array ) { if (! is_array ( $array ) || count ( $array )<=1){ return $array ; } $status = false; foreach ( $array as $key => $v ) { if ( $key >0) { if ( $array [ $key -1]> $array [ $key ]) { $array [ $key ] = $array [ $key -1]; $array [ $key -1] = $v ; $status = true; } } } if ( $status ) { return $this ->c_sortArray( $array ); } else { return $array ; } } // 快速排序 public function v_sortArray( $array ) { if (! is_array ( $array ) || count ( $array )<=1){ return $array ; } if ( count ( $array )>2) { $m = $array [ floor ( count ( $array )/2)+1]; } else { if ( $array [0]> $array [1]) { $temp = $array [0]; $array [0] = $array [1]; $array [1] = $temp ; } return $array ; } $leftarray = array (); $rightarray = array (); foreach ( $array as $key => $v ) { if ( $v > $m ) { $rightarray [] = $v ; } if ( $v < $m ) { $leftarray [] = $v ; } if ( $v == $m ) { $mid [] = $v ; } } $nleftarray = $this ->v_sortArray( $leftarray ); $nrightarray = $this ->v_sortArray( $rightarray ); return array_merge ( $nleftarray , $mid , $nrightarray ); } // 直接插入排序 public function i_sortArray( $array ) { if (! is_array ( $array ) || count ( $array )<=1){ return $array ; } $newarray = array ( $array [0]); $temp = 0; foreach ( $array as $k => $v ) { if ( $k >0) { if ( $v >= $newarray [ count ( $newarray )-1]) { $newarray [] = $v ; } else { foreach ( $newarray as $nk => $nv ) { if ( $v < $nv ) { $temparray = array (); foreach ( $newarray as $ck => $cv ) { if ( $ck < $nk ) { $temparray [ $ck ] = $cv ; } elseif ( $ck == $nk ) { $temparray [ $ck ] = $v ; $temparray [( $ck +1)] = $cv ; } else { $temparray [( $ck +1)] = $cv ; } } $newarray = $temparray ; break ; } } } } } return $newarray ; } } $bevin = new paixu; $array = array (5,4,5,4,4,5,5,5,5,5); $v = $bevin ->t_sortArray( $array ); print_r( $v ); $v = $bevin ->c_sortArray( $array ); print_r( $v ); $v = $bevin ->v_sortArray( $array ); print_r( $v ); $v = $bevin ->i_sortArray( $array ); print_r( $v ); |
运行结果:
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
|
Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) Array ( [0] => 4 [1] => 4 [2] => 4 [3] => 5 [4] => 5 [5] => 5 [6] => 5 [7] => 5 [8] => 5 [9] => 5 ) |
希望本文所述对大家PHP程序设计有所帮助。