PHP 常见排序算法 [ 新手入门 ]
/**
* 交换方法
* @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;
}
共 0 条回复
没有找到数据。
PHP学院的中学生
注册时间:2018-10-23
最后登录:2025-03-24
在线时长:168小时46分
最后登录:2025-03-24
在线时长:168小时46分
- 粉丝29
- 金钱4730
- 威望30
- 积分6710