PHP冒泡排序算法详解

发布 : 2019-06-08 分类 : 后端 浏览 :

前言

冒泡排序大概的意思是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。但其实在实际过程中也可以根据自己需要反过来用,大树往前放,小数往后放。

实战

1. 原理解析

2. 代码解析

正序排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function maopao($list)
{
$count = count($list);
# 循环1: 控制每个待排序的元素
for ($i = 0; $i < $count; $i++) {
#循环2:整个循环结束后将最大的元素放到最后边
for ($j = 0; $j < $count - 1 - $i; $j++) {
if ($list[$j] > $list[$j + 1]) {
$temp = $list[$j + 1];
$list[$j + 1] = $list[$j];
$list[$j] = $temp;
}
}
}
return $list;
}
$data = [19,13,6,45,32,53,99,3];
$result = maopao($data);
print_r($result);

输出结果:

1
2
3
4
5
6
7
8
9
10
11
Array
(
[0] => 3
[1] => 6
[2] => 13
[3] => 19
[4] => 32
[5] => 45
[6] => 53
[7] => 99
)

第一层循环控制数组的每个元素,第二层循环控制两两比较的次数,加入数组有6个元素,那么只需要比较5次,如果相邻两个元素前面元素比后面元素大,那就把两个元素的位置交换,以此类推,第二层循环完毕之后就可以把数组最大元素排到最尾部。

倒序排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function maopao($list)
{
$count = count($list);
# 循环1: 控制每个待排序的元素
for ($i = 0; $i < $count; $i++) {
#循环2:整个循环结束后将最大的元素放到最后边
for ($j = 1; $j < $count - $i; $j++) {
if ($list[$j-1] < $list[$j]) {
$temp = $list[$j - 1];
$list[$j - 1] = $list[$j];
$list[$j] = $temp;
}
}
}
return $list;
}
$data = [19,13,6,45,32,53,99,3];
$result = maopao($data);
print_r($result);

输出结果:

1
2
3
4
5
6
7
8
9
10
11
Array
(
[0] => 99
[1] => 53
[2] => 45
[3] => 32
[4] => 19
[5] => 13
[6] => 6
[7] => 3
)

结语

排序算法在编程思想中至关重要,我们需要掌握它的算法原理,了解它的代码设计,这样我们的编程水平就会有所提升!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹