最近一直想学习一些算法相关的基础知识 锻炼自己的思维能力
刚学习了第一个最基础的冒泡排序 就拿来实践下
理论部分:
冒泡排序是数列排序的一种算法 根据两个相邻值的大小排序 如果右边的数字小于左边的数字 则被交换 重复此操作 直到最后所有的数字都被排序
代码部分:
$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信息
网友评论