PHP常见排序算法
hanpy

面试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
$arr = array(1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39);

// 冒泡排序
function bubble($arr)
{
// 控制比较的轮数
for ($i = 1, $len = count($arr); $i < $len; $i++) {
// 比较的元素
for ($j = 0; $j < $len - $i; $j++) {
if ($arr[$j] > $arr[$j + 1]) {
list($arr[$j], $arr[$j + 1]) = array($arr[$j + 1], $arr[$j]);
}
}
}
return $arr;
}

print_r(bubble($arr));

// 冒泡排序(加强一点点)
function bubble($arr, $sort = 'asc')
{
$sort = strtolower($sort);
if (!in_array($sort, array('asc', 'desc')))
$sort = 'asc';

// 控制比较的轮数
for ($i = 1, $len = count($arr); $i < $len; $i++) {
// 比较的元素
for ($j = 0; $j < $len - $i; $j++) {
if ($sort == 'desc') {
if ($arr[$j] < $arr[$j + 1]) {
list($arr[$j], $arr[$j + 1]) = array($arr[$j + 1], $arr[$j]);
}
} else {
if ($arr[$j] > $arr[$j + 1]) {
list($arr[$j], $arr[$j + 1]) = array($arr[$j + 1], $arr[$j]);
}
}
}
}
return $arr;
}

快速排序

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
$arr = array(1, 43, 54, 62, 21, 66, 32, 78, 36, 76, 39);

// 快速排序
function fastSort($arr)
{
$len = count($arr);
if ($len <= 1) return $arr;

$left = $right = array();
$offset = current($arr);

for ($i = 1; $i < $len; $i++) {
if ($arr[$i] > $offset) {
$right[] = $arr[$i];
} else {
$left[] = $arr[$i];
}
}

$left = fastSort($left);
$right = fastSort($right);

return array_merge($left, array($offset), $right);
}

print_r(fastSort($arr));