用PHP实现冒泡排序


发文时间:2020年06月14日 18:11:02     编辑:Aaron      标签:冒泡算法 562


冒泡排序属于一种典型的交换排序

一、双层for实现

<?php
/*
 * 思路:N个数组来从小到大排队,两两相比,小靠前大靠后,外层循环N,内层循环 N-i
 * 内层循环时,for的条件长度可减去外层循环的次数(i),因每次循环都会把最大的值排
 * 到最后 依次递增
 */
$arr=[2,9,8,4,3,0,2,5,7,6,24,11,4,1];
$length=count($arr)-1;
for($i=0;$i<$length;$i++){
  for($j=0;$j<$length-$i;$j++){
  //比较j和j+1的值 若前大后小就进行位置互换
     if($arr[$j]>$arr[$j+1]){
         $value=$arr[$j];
         $arr[$j]=$arr[$j+1];
         $arr[$j+1]=$value;
      }
    }
}
var_dump($arr);
/*
 输出
    array (size=14)
      0 => int 0
      1 => int 1
      2 => int 2
      3 => int 2
      4 => int 3
      5 => int 4
      6 => int 4
      7 => int 5
      8 => int 6
      9 => int 7
      10 => int 8
      11 => int 9
      12 => int 11
      13 => int 24
 */
die;


二、单层for实现

<?php
/*
 * 思路:通过$i判断当前for是否循环结束,从而继续下一次的循环
 */
$arr=[2,9,8,4,3,15,21,5,7,6,24,11,74,1];
$length=count($arr)-1;
for ($i = 0; $i < $length; $i++) {
    //判断是否应该交换位置
    if ($arr[$i] > $arr[$i + 1]){
        $value= $arr[$i];
        $arr[$i] = $arr[$i + 1];
        $arr[$i + 1] = $value;
    }
    //判断该次for是否循环完
    if ($i == $length-1) {
        //若该次for循环结束将i赋值-1,并且将$length的长度减1,继续下次循环
        $i = -1;
        $length--;
    }
}
var_dump($arr);
/*
 输出
   array (size=14)
      0 => int 1
      1 => int 2
      2 => int 3
      3 => int 4
      4 => int 5
      5 => int 6
      6 => int 7
      7 => int 8
      8 => int 9
      9 => int 11
      10 => int 15
      11 => int 21
      12 => int 24
      13 => int 74
 */
die;


 

若无特殊说明,此文章为博主原创。
写稿不易,如需转载,请注明出处: https://www.aaroner.cn/art/66.html




SITE MAP

  FOLLOW US