排序算法之 - 冒泡排序

冒泡排序

冒泡排序就是重复执行:从最右侧开始,依次比较相邻的两个元素的大小,右侧小于左侧则交换两者的位置,看起来右侧的较小的数就好像渐渐“浮”到左边,以下为示例:

  • 第一轮运行流程及结果(实线为交换,虚线为不交换):
    在这里插入图片描述
  • 第二轮运行流程及结果:
    在这里插入图片描述
  • 第三轮运行流程及结果:
    在这里插入图片描述
  • 第四轮运行流程及结果:
    在这里插入图片描述
  • 第五轮运行流程及结果:
    在这里插入图片描述
  • 第六轮运行流程及结果:
    在这里插入图片描述
  • 第七轮运行流程及结果:
    在这里插入图片描述
  • 第八轮运行流程及结果:其实截止到第七轮的时候排序已经完成了,但是当我们编码的时候 代码并不知道排序已经完成,所以代码会继续运行,也就是再比较一轮,如下:
    在这里插入图片描述

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值