php之编程思想(冒泡排序法)

定义:

冒泡排序(Bubble Sort):重复走访要排序的数组,一次比较两个元素,如果它们的顺序错误,就把他们交换过来。

走访数组的工作重复进行,直到没有再需要交换的元素,这样改数列就排序完成。

算法思路:

  1. 比较相邻的两个元素,如果第一个比第二个大,就交换他们两个
  2. 对每个相邻的的元素做同样的工作,从开始的第一对到结尾的最后一对,这一点,最后的元素应该是最大(如果倒序的话:或者最小);
  3. 针对所有的元素重复以上工作,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较。

代码:

请根据代码序号来看,从1到4,先从内部for循环开始,再添加外部for循环。每一次内部循环走完全部,外面循环才走一次。

$arr = array(1,2,8,4,9,5,3,10,13,12);
$len = count($arr);

//4:内部循环一次已经找出最大值,我们需要让前面的值再重复循环对比
for($i = 0; $i < $len; $i++){
    //1:让最大的值放到最右边
    for($j = 0; $j < $len -1 -$i; $j++){
        //2:判断,两两相比
        if($arr[$j] > $arr[$j+1]){
            //3:左边比右边大:交换
            $for = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $for;    
        }
    }
}
print_r($arr);

输出结果:

Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 8 [6] => 9 [7] => 10 [8] => 12 [9] => 13 ) 

 

for循环原理:

我们来看一下,循环到底是如何先走内部完内部for循环,再走一次外部for循环的。为了方便查看结果,我减少了数组个数。

$arr = array(1,2,8,4,9);  //数组段一段方便查看输出
$len = count($arr);

//4:内部循环一次已经找出最大值,我们需要让前面的值再重复循环对比
for($i = 0; $i < $len; $i++){
    //1:让最大的值放到最右边
    for($j = 0; $j < $len -1 -$i; $j++){
        //2:判断,两两相比
        if($arr[$j] > $arr[$j+1]){
            //3:左边比右边大:交换
            $for = $arr[$j];
            $arr[$j] = $arr[$j+1];
            $arr[$j+1] = $for;
            
        }
        echo 'inner for $i:  '.$i.'</br>';
        echo '------<br/>';
        echo 'inner for $j:   '.$j.'</br>';
        echo '#############</br>';
    }
    echo '<strong>outside for $i:</strong>   '.$i.'</br>';
    echo '-------------<br/>';
    echo '<strong>outside for $j:</strong> '.$j.'</br>';
    echo '#############</br>';
}
print_r($arr);

输出结果:

第一次外部for循环和第一次内部全部for循环输出结果:

第一次外部for循环$i = 0;内部for循环 $j = 0,1,2,3;  为什么到了外部for循环 $j = 4 ,因为内部循环执行数组长度-1了

inner for $i: 0
------
inner for $j: 0
#############
inner for $i: 0
------
inner for $j: 1
#############
inner for $i: 0
------
inner for $j: 2
#############
inner for $i: 0
------
inner for $j: 3
#############
outside for $i: 0
-------------
outside for $j: 4

第二次外部for循环和第二次内部全部for循环输出结果:

inner for $i: 1
------
inner for $j: 0
#############
inner for $i: 1
------
inner for $j: 1
#############
inner for $i: 1
------
inner for $j: 2
#############
outside for $i: 1
-------------
outside for $j: 3

第三次外部for循环和第三次内部全部for循环输出结果:

inner for $i: 2
------
inner for $j: 0
#############
inner for $i: 2
------
inner for $j: 1
#############
outside for $i: 2
-------------
outside for $j: 2

第四次外部for循环和第四次内部全部for循环输出结果:

inner for $i: 3
------
inner for $j: 0
#############
outside for $i: 3
-------------
outside for $j: 1
#############
outside for $i: 4
-------------
outside for $j: 0

最后一次内部for循环已经不满足条件走完了,只输出了外部for循环。

 

如果还有什么不懂的,欢迎留言咨询!!!

我是程序媛willa。

 

posted @ 2020-07-02 10:56  娓娓到来  阅读(181)  评论(0)    收藏  举报