码迷,mamicode.com
首页 > 编程语言 > 详细

php冒泡算法

时间:2018-01-10 14:14:29      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:边界值   数据   结束   很多   数学   count   理解   个数   for   

1.冒泡算法

网上搜了很多,但是总是对于每次循环的边界值思路讲的比较笼统。不是很容易被新手记住,我自己平时也是硬记下来的。但是对于算法,硬记,时间长了还是容易忘记,所以自己写了一次,把每次思路尽量写下来,便于理解,理解了容易加深映像,不容易忘记了。

冒泡算法,核心就是

    循环比对  每次比对相邻2个数组的大小,然后把最大的数组放到后面,这样所有比对循环一次,就会把数组中最大的数放到数组最后,

    然后重复循环(重复上面的比对循环):此时循环的时候 最后一个值是不需要参加循环了,因为已经确定是最大的那个了。也就是说,重复循环,比对数组越来越少。最终只剩一个数组元素了。循环结束

代码层看,

$arr=array(5,4,3,6,7,1,2,10,8,9);

先从内层比对循环开始看

一般for循环 这么写

for($i=0;$i<$xx;$i++){

    if($arr[$i]>$arr[$i+1]){//相邻比较 这个应该比较容易理解吧
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }

}  

上面思路说了,每次循环都是从开头第一个元素开始 所以$i 起始值为0, 重复循环一次,下次循环就少比对一个元素。这里$xx要越来越小; 那这个$xx怎么确定呢?

首先我们来看下这个$xx边界值。

$xx第一次循环值是多少 是数组元素长度 count($arr)减 1  为什么呢?因为比对的时候 用到的$arr[$i+1] 。如果$xx等于数组长度,每次循环比对到最后的时候 $arr[$i+1] 就不存在了,也就是没法比对了

$xx 最后一次值该是多少呢? 是1, 循环到最后 只剩一个数组元素了。

也就是说 $xx  为  count($arr)-$k  $k是累加的 比对循环可改为(重复循环每循环一次)

for($i=0;$i<count($arr)-$k;$i++){

    if($arr[$i]>$arr[$i+1]){//相邻比较
        $tem=$arr[$i];
        $arr[$i]=$arr[$i+1];
        $arr[$i+1]=$tem;
    }

}  

再看这个$k 想想这个$k不就是随着重复循环在累增的吗? 把重复循环代码加上如下

 for($k=1;$k<count($arr);$k++){

        //对长度越来越少的一组数据 找出最大让其浮到最后

        for($i=0;$i<count($arr)-$k;$i++){

            if($arr[$i]>$arr[$i+1]){//相邻比较
                $tem=$arr[$i];
                $arr[$i]=$arr[$i+1];
                $arr[$i+1]=$tem;
            }

        }
    }

我们再来看下$k是怎么确定边界值的 上面说了, $xx 边界值是 count($arr)-1 到 1   已经定义  那么数学算法 $k边界值也就出来了 为 1到 count($arr)-1

写入到循环里也就是 $k=1;$k<count($arr);$k++了。

语言组织的还是不太完善,等晚点再来整理。

 

php冒泡算法

标签:边界值   数据   结束   很多   数学   count   理解   个数   for   

原文地址:https://www.cnblogs.com/phpjinggege/p/8257851.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!