PHP学院的中学生 2021-03-30 11:28:11 1055次浏览 0条回复 0 0 0
/**
  * 交换方法
  * @param array $arr 目标数组
  * @param $a 索引a
  * @param $b 索引b
  * @param bool $flag 交换标志
  * @return bool
  */
 function swap(array &$arr,$a,$b,$flag = false) {
     // 遍历i后面的元素,只要该元素小于当前元素,就把较小的往前冒泡
     if($arr[$a] > $arr[$b]){
         $temp = $arr[$a];
         $arr[$a] = $arr[$b];
         $arr[$b] = $temp;
         $flag = true;
     }
     return $flag;
 }

 /**
  * 第一种写法
  * @param $arr 所要排序的数组
  * @return mixed 返回的数组
  */

 function bubbleSort($arr) {
     $len = count($arr);
     if ($len <= 1) {return $arr;}
     //该层循环控制 需要冒泡的轮数
     for ($i = 0; $i < $len-1; $i++) {
         //该层循环用来控制每轮 冒出一个数 需要比较的次数
         for ($j = $i + 1; $j < $len; $j++) {
             // 或者 $this->swap($arr,$j,$j+1);
             $this->swap($arr,$i,$j);
         }
     }
     return $arr;
 }

 //第二种写法
 public function BubbleSort2($arr){
     $len = count($arr);
     if ($len <= 1) {return $arr;}
     for ($i = 0;$i < $len-1;$i++){
         //TODO 本趟排序开始前,交换标志应为假
         $flag = false;
         for ($j = 0;$j <= $len-2;$j++){
             $flag = $this->swap($arr,$j,$j+1,$flag);
         }
         if(!$flag) return $arr;
     }
     return $arr;
 }

 //第三种写法
 function BubbleSort3(array &$arr){
     $len = count($arr);
     if ($len <= 1) {return $arr;}
     for($i = 0;$i < $len-1;$i++){
         //从后往前逐层上浮小的元素 $j >= 0
         for($j = $len - 2;$j >= $i ;$j --){
             $this->swap($arr,$j,$j+1);
         }
     }
     return $arr;
 }

 //第四种写法
 function bubbleSort4($arr)
 {
     $len = count($arr);
     if ($len <= 1) {return $arr;}
     for($i = 0;$i < $len-1;$i++) {
         for($j = 0;$j < $len-$i-1;$j++) {
             $this->swap($arr,$j,$j+1);
         }
     }
     return $arr;
 }

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册