1 $arr = [1,43,56,78,2,5,98,2,12];
2
3 // 冒泡排序
4 function bubble_sort($arr){
5 $l = count($arr);
6 for($i = 0;$i < $l-1;$i++){
7 for($j = 0;$j < $l-1-$i;$j++){
8 if($arr[$j] > $arr[$j + 1]){
9 $a = $arr[$j];
10 $arr[$j] = $arr[$j + 1];
11 $arr[$j + 1] = $a;
12 }
13 }
14 }
15 return $arr;
16 }
17 // var_dump(bubble_sort($arr));
18
19
20 // 选择排序
21 function selection_sort($arr){
22 $count = count($arr);
23 for($i = 0;$i < $count - 1;$i++){
24 for($j = $i + 1;$j < $count;$j++){
25 if($arr[$i] > $arr[$j]){
26 $a = $arr[$i];
27 $arr[$i] = $arr[$j];
28 $arr[$j] = $a;
29 }
30 }
31 }
32 return $arr;
33 }
34 // var_dump(selection_sort($arr));
35
36
37 // 插入排序
38 function charu($arr){
39 $l = count($arr);
40 for($i = 1;$i < $l;$i++){
41 if($arr[$i] < $arr[$i - 1]){
42 $a = $arr[$i];
43 $arr[$i] = $arr[$i - 1];
44 $j = $i - 1 - 1;
45 while($a < $arr[$j]){
46 $arr[$j + 1] = $arr[$j];
47 --$j;
48 }
49 $arr[$j + 1] = $a;
50 }
51 }
52 return $arr;
53 }
54 // var_dump(charu($arr));
55
56
57 // 快速排序
58 function quick_sort($arr){
59 $k = count($arr);
60 if($k < 2){
61 return $arr;
62 }
63 $key = $arr[0];
64 $left = [];
65 $right = [];
66 for($i = 1;$i < $k;$i++){
67 if($arr[$i] < $key){
68 $left[] = $arr[$i];
69 }
70 if($arr[$i] > $key){
71 $right[] = $arr[$i];
72 }
73 }
74 $left = quick_sort($left);
75 $right = quick_sort($right);
76 return array_merge($left,array($key),$right);
77 }
78 // var_dump(quick_sort($arr));
79
80
81 // 归并排序
82 function merge_sort($arr){
83 $len = count($arr);
84 if($len == 1){
85 return $arr;
86 }
87 $mid = $len / 2;
88 $left = array_slice($arr,0,$mid);
89 $right = array_slice($arr,$mid);
90 $left = merge_sort($left);
91 $right = merge_sort($right);
92 return merge($left,$right);
93 }
94 function merge($left,$right){
95 $res = [];
96 while(count($left) > 0 && count($right) > 0){
97 if($left[0] > $right[0]){
98 $res[] = $right[0];
99 $right = array_slice($right,1);
100 }else{
101 $res[] = $left[0];
102 $left = array_slice($left,1);
103 }
104 }
105 while(count($left) > 0){
106 $res[] = $left[0];
107 $left = array_slice($left,1);
108 }
109 while(count($right) > 0){
110 $res[] = $right[0];
111 $right = array_slice($right,1);
112 }
113 return $res;
114 }
115 // var_dump(merge_sort($arr));
116
117
118 // 希尔排序
119 function shell_sort($arr){
120 $l = count($arr);
121 $f = 3;
122 $h = 1;
123 while($h < intval($l/$f)){
124 $h = $f * $h + 1;
125 }
126 while($h >= 1){
127 for($i = $h;$i < $l;$i++){
128 for($j = $i;$j >= $h;$j -= $h){
129 if($arr[$j] > $arr[$j-$h]){
130 $temp = $arr[$j];
131 $arr[$j] = $arr[$j-$h];
132 $arr[$j-$h] = $temp;
133 }
134 }
135 }
136 $h = intval($h/$f);
137 }
138 return $arr;
139 }
140 // var_dump(shell_sort($arr));
141
142
143 // 计数排序
144 function count_sort($arr){
145 $l = count($arr);
146 $max = max($arr);
147
148
149 $frequency = new SplFixedArray($max + 1);
150 for($i = 0;$i < $l;$i++){
151 if(empty($frequency[$arr[$i]])){
152 $frequency[$arr[$i]] = 0;
153 }
154 $frequency[$arr[$i]] += 1;
155 }
156
157
158 $arr = [];
159 for($i = 0;$i < count($frequency);$i++){
160 if(!empty($frequency[$i])){
161 for($j = 0;$j < $frequency[$i];$j++){
162 $arr[] = $i;
163 }
164 }
165 }
166 return $arr;
167 }
168 // var_dump(count_sort($arr));
169
170
171 // 桶排序
172 function bucket_sort($arr){
173 $min = min($arr);
174 $max = max($arr);
175
176
177 $kl = array_fill($min,$max - $min + 1,0);
178
179
180 foreach($arr as $k => $v){
181 $kl[$v] += 1;
182 }
183 $arr = [];
184 foreach($kl as $k => $v){
185 for($i = 0;$i < $v;$i++){
186 $arr[] = $k;
187 }
188 }
189 return $arr;
190 }
191 // var_dump(bucket_sort($arr));
192
193
194 // 基数排序
195 function radix_sort($arr){
196 //创建二维数组 下标为 0~9
197 $kl = array_fill(0,10,[]);
198 //获取数组个数
199 $count = count($arr);
200 // 数组的最大值
201 $max = max($arr);
202 // 最大值的长度
203 $len = strlen($max);
204 for($i = 0;$i < $len;$i++){
205 // 获取10的$i次方
206 $p = pow(10,$i);
207 for($j = 0;$j < $count;$j++){
208 // 获取对应位数上的数
209 $mod = ($arr[$j] / $p) % 10;
210 // 放入二维数组中
211 $kl[$mod][] = $arr[$j];
212 }
213 // 把传入的数组($arr)清空
214 $arr = [];
215 foreach($kl as $k => $v){
216 // 合并数组
217 $arr = array_merge($arr,$v);
218 // 把二维数组($kl)清空
219 $kl[$k] = [];
220 }
221 }
222 return $arr;
223 }
224 // var_dump(radix_sort($arr));