为了账号安全,请及时绑定邮箱和手机立即绑定

【我就瞎记记,你就瞎看看】小算法-冒泡排序

标签:
PHP

冒泡排序

  • 对样本数组进行比较循环
  • 从头开始依次比较大小,交换位置,然后再跟相邻的下一个数进行比较,再交换位置
  • 一轮比较完毕以后,进行下一次的比较,还是从样本头开始比较,比较次数比上一次的次数减少一次,因为有一个数在上一轮比较中已经归位。

  • 以此类推,循环到最后一个数停止。

例如:

  • $arr = [15, 32, 78,13, 58, 52, 63, 22, 14, 55];
    样本数组的样本总数是10,则要进行$i=(10-1)轮。

  • 每轮再进行10-$i次的相邻数($i的起始值是1)的比较,直至该轮的结束,数字归位

  • 如果是从大到小,那么比较左边的数和右边的数谁更小,更小的向右交换位置,以此类推。直到最小数到达最后面的位置,然后进行下一轮。

代码:

<?php
/**
 * 冒泡算法排序
 */
//参与排序的随机数组,手动随机!!
$arr = [15, 32, 78,13, 58, 52, 63, 22, 14, 55];
foreach ($arr as $arr_l){
    echo $arr_l."--";
}
echo '<hr/>';

//冒泡排序: 外循环的冒泡次数是N-1次。因为若干个数冒泡,样本中的最后一个数是不需要进行排序的
for ($i = 1; $i < count($arr) -1; $i++) {  //样本数是10,$i<9,则$i的依次取值是1,2,3,4,5,6,7,8
    /**
     * $j的取值范围最多到count($arr) - 2 ,因为$j+1的取值范围最大是count($arr) ;
     *
     * 由于$j的取值是取决于 count($arr) - $i
    */
    for ($j = 0; $j < count($arr) - $i; $j++) {//某一次的冒泡排序次数是  样本数减去$i的值, $j的依次取值是0-8,0-7,...,0-2
        if ($arr[$j] < $arr[$j+1]) { //这边的比较符号决定排序顺序。
            $t = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $t;
        }
    }

}
foreach ($arr as $arr_l){
    echo $arr_l."--";
}

缺点:

  • 时间复杂度为O(N^2),算法较为浪费时间
点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消