<?php
// ==============PHP 冒泡算法==============
header("Content-type:text/html;charset=utf-8");
$arr=array(1,11,10,12,21,3);
function mpsort($arr){
$n = count($arr);
for($i = 0; $i < $n; $i++){ //循环总的次数。
for($j = 0; $j < $n-$i-1; $j++){
if($arr[$j] > $arr[$j+1]){ //判断前一个数是否大于第二个数
$tmp = $arr[$j]; //这三步是 调换位置 自然排序 1 2 3 12 13
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
return $arr;
}
echo '<pre>';
print_r(mpsort($arr));
echo '</pre>';
// ==================== 原理讲解======================
/*
$arr=array(5,4,2,1,3);
print_r(mpsort($arr));
function mpsort($arr){
$n = count($arr);
$num = 1;
for ($i=0; $i < $n; $i++) {
for ($j=0; $j < $n-$i-1; $j++) {
if($arr[$j] > $arr[$j+1] ){
print_r($arr);
echo $num++;
echo "<br>";
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}else{
print_r($arr);
echo "-----未处理------ ";
echo $num++;
echo "<br>";
}
}
}
}
*/
// $i 0 1 2 3 4 $i 出现的值。
// $j < 4 3 2 1 0 $j 出现的值。 总共循环10次。
/* 打印出来每一次执行的情况。
Array ( [0] => 5 [1] => 4 [2] => 2 [3] => 1 [4] => 3 ) 1
Array ( [0] => 4 [1] => 5 [2] => 2 [3] => 1 [4] => 3 ) 2
Array ( [0] => 4 [1] => 2 [2] => 5 [3] => 1 [4] => 3 ) 3
Array ( [0] => 4 [1] => 2 [2] => 1 [3] => 5 [4] => 3 ) 4
Array ( [0] => 4 [1] => 2 [2] => 1 [3] => 3 [4] => 5 ) 5
Array ( [0] => 2 [1] => 4 [2] => 1 [3] => 3 [4] => 5 ) 6
Array ( [0] => 2 [1] => 1 [2] => 4 [3] => 3 [4] => 5 ) 7
Array ( [0] => 2 [1] => 1 [2] => 3 [3] => 4 [4] => 5 ) 8
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) -----未处理------ 9
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) -----未处理------ 10
*/
/*
第二个for循环中的 $n-$i-1 设定原因,比如现在索引在2(从0开始),那么后面还有2个值需要比较。那么$j的for循环只要在对比2次就可以了($j 的值是增加的)。
那数组的第 $j 个索引,和 $j+1 个索引值大小作对比,然后根据大小确定是否调整位置,完成之后会进入到for循环下一个$j索引值,继续对比。
*/
php 冒泡排序
最新推荐文章于 2023-12-05 16:36:38 发布