$arr =[7,4,5,11,3];
function bubbleSort($arr) {
$len = count($arr);//读取数组的数目
//慢的原因就是因为要执行数组的长度减1次循环 ,因为他的机制就是两两比较排序
for($i = 1; $i < $len; $i++) {
//外循环先执行一次,内循环执行完,此时开始调整数组元素的位置
for($j = 0; $j < $len-$i; $j++) {
if($arr[$j]>$arr[$j+1]){
$tmp = $arr[$j+1];
$arr[$j+1]=$arr[$j];
$arr[$j] =$tmp;
}
}
}
return $arr;
}
var_dump(bubbleSort($arr));//调用函数
=============================================================
个人理解:
//$arr =[7,4,5,11,3];
//外循环第一次循环: 当i=1;判断i是否小于5,是就执行内循环
//内循环第一次循环:当j=0;判断j是否小于5-1,即j是否小于4,是就执行内循环的判断,
//判断数组的arr0是否大于arr1,7>4,所以执行
//因为7>4,所以4要先走开,4就走去了旁边的空位,然后7才能去4的位置,4再去7的位置,
//内循环第一次的结果就是 :[4,7,5,11,3],
//执行第二次内循环,此时j=1, j<4, 判断7(arr[1])是否大于5(arr[2]), 7>5,所以执行
//因为7(arr[1])>5(arr[2]),所以5要先走开,7才能去5的位置,5再去7的位置
//内循环的第二次结果 :[4,5,7,11,3]
//执行第三次内循环:此时j=2,j<4,判断7(arr[2])是否大于11(arr[3]),7<11。所以下面的位置不用调整,站在原位置
//内循环第三次结果:[4,5,7,11,3]
//执行第四次内循环 :此时j=3,j<4,判断11(arr[3])是否大于3(arr[4]),大于。所以要调整位置:
//结果为[4,5,7,3,11]
//至此,第一次外循环执行完毕
//开始第二次的外循环 ,当i=2,判断i是否小于5,是就执行内循环
//。。然后内循环又开始循环。。
//第二次外循环的结果为:[4,5,3,7,11];
//第三次外循环的结果为:[4,3,5,7,11];
//第四次外循环的结果为:[3,4,5,7,11];
//刚刚好执行完,排序完成!!
//记录学习php日程