PHP排序算法的复习和总结,php排序算法
对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们都是用的是asort arsort 等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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
function insertSort( $arr ){
if (! is_array ( $arr ) || count ( $arr )==0){
return $arr ;
}
$count = count ( $arr );
for ( $i =1; $i < $count ; $i ++){
if (isset( $arr [ $i ])){
$tmp = $arr [ $i ];
$j = $i - 1;
while ( $arr [ $j ] > $tmp ){
$arr [ $j +1] = $arr [ $j ];
$arr [ $j ] = $tmp ;
$j --;
}
}
}
return $arr ;
}
function selectSort( $arr ){
if (! is_array ( $arr ) || count ( $arr ) == 0)
{
return $arr ;
}
$count = count ( $arr );
for ( $i =0; $i < $count ; $i ++){
$k = $i ;
for ( $j = $i +1; $j < $count ; $j ++){
if ( $arr [ $k ] > $arr [ $j ])
$k = $j ;
if ( $k != $i ){
$tmp = $arr [ $i ];
$arr [ $i ] = $arr [ $k ];
$arr [ $k ] = $tmp ;
}
}
}
return $arr ;
}
function bubbleSort( $array ){
$count = count ( $array );
if ( $count <= 0) {
return false;
}
for ( $i =0; $i < $count ; $i ++){
for ( $j = $count -1; $j > $i ; $j --){
if ( $array [ $j ] < $array [ $j -1]){
$tmp = $array [ $j ];
$array [ $j ] = $array [ $j -1];
$array [ $j -1] = $tmp ;
}
}
}
return $array ;
}
function quickSort( $array ){
if ( count ( $array ) <= 1){
return $array ;
}
$key = $array [0];
$left_arr = array ();
$right_arr = array ();
for ( $i =1; $i < count ( $array ); $i ++){
if ( $array [ $i ] <= $key ){
$left_arr [] = $array [ $i ];
} else {
$right_arr [] = $array [ $i ];
}
}
$left_arr = quickSort( $left_arr );
$right_arr = quickSort( $right_arr );
return array_merge ( $left_arr , array ( $key ), $right_arr );
}
function sortByVal( $arr , $strOrder = 'asc' )
{
if (! is_array ( $arr ) || count ( $arr )==0)
{
return $arr ;
}
$arrReturn = array ();
foreach ( $arr as $key => $val )
{
$arrKey [] = $key ;
$arrVal [] = $val ;
}
$count = count ( $arrVal );
if ( $count )
{
for ( $key =0; $key < $count ; $key ++)
{
$arrKeyMap [ $key ] = $key ;
}
for ( $i =0; $i < $count ; $i ++)
{
for ( $j = $count -1; $j > $i ; $j --)
{
$bol = $strOrder == 'asc' ? $arrVal [ $j ]< $arrVal [ $j -1] : $arrVal [ $j ]> $arrVal [ $j -1];
if ( $bol ){
$tmp = $arrVal [ $j ];
$arrVal [ $j ] = $arrVal [ $j -1];
$arrVal [ $j -1] = $tmp ;
$keytmp = $arrKeyMap [ $j ];
$arrKeyMap [ $j ] = $arrKeyMap [ $j -1];
$arrKeyMap [ $j -1] = $keytmp ;
}
}
}
if ( count ( $arrKeyMap ))
{
foreach ( $arrKeyMap as $val )
{
$arrReturn [] = $arrKey [ $val ];
}
}
return $arrReturn ;
}
}
function arraySortByVal( $arr , $keys , $type = 'asc' ){
$keysvalue = $new_array = array ();
foreach ( $arr as $k => $v ){
$keysvalue [ $k ] = $v [ $keys ];
}
if ( $type == 'asc' ){
asort( $keysvalue );
} else {
arsort( $keysvalue );
}
reset( $keysvalue );
foreach ( $keysvalue as $k => $v ){
$new_array [ $k ] = $arr [ $k ];
}
return $new_array ;
}
|
对于下面的2个对于array的值进行排序的方法一个是自己实现的一个是使用了原生的PHP函数的,其实排序对于少量数据一般就单页的数据量的数据还是可以的,如果涉及到大量的数据的排序,建议可以整合到MYSQL的基础类中来进行。
http://www.bkjia.com/PHPjc/1104658.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1104658.htmlTechArticlePHP排序算法的复习和总结,php排序算法 对于PHP中对数组的元素进行排序,这个是很经常用到的,之前的项目中也有,而且对于几种排序我们...