冒泡排序算法核心:主要是每个元素从头开始,跟后面的元素进行对比,遇到比自己大的就对换一下位置,所以理论上来说最后一个元素不需要进行对比了,要么是最大的没被替换,不是最大的一定被替换了;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php

//冒泡排序
function bubbleSort(Array &$arr){
if(empty($arr)){
return $arr;
}
$len = count($arr);
for($i=0; $i < $len; $i++){
$flag = false; //对冒泡排序进行优化
for($j=0; $j < $len -$i -1; $j++){
//这里写升序,如果降序改成<
if($arr[$j] > $arr[$j+1]){
$temp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $temp;
$flag = true;
}
if($flag){
//打印执行结果
echo "升序:".$arr[$j].'和'.$arr[$j+1].'交换<br />';
var_dump($arr);
}

}

if(!$flag){
break;
}
}
return $arr;
}

$arr = [1,4,2,8,5,7,6,3,9];
bubbleSort($arr);
var_dump($arr);