基于PHP实现的冒泡排序

2019-01-17  本文已影响0人  清风倚歌行

最近一直想学习一些算法相关的基础知识 锻炼自己的思维能力
刚学习了第一个最基础的冒泡排序 就拿来实践下

理论部分:

冒泡排序是数列排序的一种算法 根据两个相邻值的大小排序 如果右边的数字小于左边的数字 则被交换 重复此操作 直到最后所有的数字都被排序

代码部分:

$arr = array(1,3,6,2,9,7,5,8,4);
$arr = bubbleSort($arr);
print_r($arr);
function bubbleSort($arr)
{
    $len = count($arr); //获得数组长度

    for($i=0;$i<$len;$i++){
    
        for($j=0;$j<$len-$i;$j++){
        
            if($j+1 < $len){  //这里是为了防止超出数组取值范围 

                if($arr[$j] > $arr[$j+1]){    //进行排序 大的往后放
                    $temporary = $arr[$j];    //把当前变量保留
                    $arr[$j]   = $arr[$j+1];  //把小的放在前面
                    $arr[$j+1] = $temporary;  //再把大的放在后面
                }
            }
        }
      
    }
    return $arr;
}

输出结果 Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 )

注意: 如果没有 if($j+1 < $len)这个判断 会提示 Notice: Undefined offset.... 这是因为超出了数组的取值范围 因为$j循环最大为数组长度-1 当进行判断左右数字比较时也就是$arr[$j+1]取值时就会触发这个提示 所以这里加上这个判断
或者可以在代码头部添加error_reporting(E_ALL || ~E_NOTICE) 更改错误级别
还可以在php.ini中设置错误级别 设置为:error_reporting = E_ALL & ~E_NOTICE 就可以不提示Notice信息

上一篇下一篇

猜你喜欢

热点阅读