冒泡排序
冒泡排序就是重复执行:从最右侧开始,依次比较相邻的两个元素的大小,右侧小于左侧则交换两者的位置,看起来右侧的较小的数就好像渐渐“浮”到左边,以下为示例:
- 第一轮运行流程及结果(实线为交换,虚线为不交换):
- 第二轮运行流程及结果:
- 第三轮运行流程及结果:
- 第四轮运行流程及结果:
- 第五轮运行流程及结果:
- 第六轮运行流程及结果:
- 第七轮运行流程及结果:
- 第八轮运行流程及结果:其实截止到第七轮的时候排序已经完成了,但是当我们编码的时候 代码并不知道排序已经完成,所以代码会继续运行,也就是再比较一轮,如下:
附
PHP
代码:
<?php
$arr = [5, 9, 3, 1, 2, 8, 4, 7, 6];
$tmp = 0;
// $execNum 标记运行到第几轮
for ($execNum = 0; $execNum < count($arr) - 1; $execNum++) {
// $compareFlag 标记对比的数位
for ($compareFlag = count($arr) - 1; $compareFlag > $execNum; $compareFlag--) {
if ($arr[$compareFlag] < $arr[$compareFlag - 1]) {
$tmp = $arr[$compareFlag];
$arr[$compareFlag] = $arr[$compareFlag - 1];
$arr[$compareFlag - 1] = $tmp;
}
}
}
echo '<pre>';
print_r($arr);
运行结果:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
785418da-bf38-460a-a9be-ef447e7e316c