原数组
$arr = [3,2,5,4,6];
// 1.先把数组for 循环遍历 每次遍历组合成新的数组
for ($y=0; $y< count($arr)-1; $y++){
// 2. 这层遍历是 按照$y的键取这次遍历的最大值
for ($x=$y+1; $x<count($arr); $x++){
// 3.固定取键为$arr[$y]['n'] 的最大值 ,要跟$arr[$x]取比较
if ($arr[$y] < $arr[$x]){
$tmp = $arr[$y];
$arr[$y] = $arr[$x];
$arr[$x] = $tmp;
// 打印1 /要在if内打印 再数组外,数组无变化,打印五意义
// echo '<pre>';
// print_r($arr);
}
}
// 打印1 die;
// 打印2
// echo '<pre>';
// print_r($arr);
}
思路解析
一位数组,二维数组都是一样的。此处我按照二维数组来做
1.首先把二维数组for循环一遍,让0号位与后面的值比较,
如果后面的值比0号位大,则调换位置,此时第一个大于0号位的值是5,得到下面数组1.Array,也就是$arr[0]=5,$arr[2]=3 其他的键值对不变
2.此时第一个内层for循环还没有结束,继续循环会得到6大于5
3.于是得到2.Array $arr[0]=6, $arr[4]=5
打印1打开得到
1 Array
(
[0] => 5
[1] => 2
[2] => 3
[3] => 4
[4] => 6
)
2.Array
(
[0] => 6
[1] => 2
[2] => 3
[3] => 4
[4] => 5
)
4这样循环一次之后,我们得到了最大值,放在0号位即可。我们要开始找1号位的最大值了
所以第二次循环要找的是$arr[$y] 此时$y=1
因为我们要找的是1号位,那么对于$x 我们从第2号位开始比较即可,
所以$x=$y+1
5. 对于内层循环,因为每次我们需要比较所有的数,所以要到最后一位count($arr);
6.但是对于外层循环 $y 比如我们一共5位数,最大键是4,$y< count($arr)-1; 得到的是$y<4,
也就是循环4次即可,可以省略一次,这个是因为我们的原则是每次循环取出最大值,第四次也是取出最大值,
那么最后一个肯定是最小值 不需要排序了
按照二维数组中某个值大小排序
原数组
我实际项目中是json 我直接转下数组好了 不再直接写了
$json = '[
{
"name": "我是3",
"n": "3"
},
{
"name": "我是2",
"n": "2"
},
{
"name": "我是5",
"n": "5"
},
{
"name": "我是4",
"n": "4"
},
{
"name": "我是6",
"n": "6"
}
]';
$arr = json_decode($json,true);
冒泡排序的实现
// 冒泡排序
// 1.先把数组for 循环遍历 每次遍历组合成新的数组
for ($y=0; $y< count($arr)-1; $y++){
// 2. 这层遍历是 按照$y的键取这次遍历的最大值
for ($x=$y+1; $x<count($arr); $x++){
// 3.固定取键为$arr[$y]['n'] 的最大值 ,要跟$arr[$x]取比较
if ($arr[$y]['n'] < $arr[$x]['n']){
$tmp = $arr[$y];
$arr[$y] = $arr[$x];
$arr[$x] = $tmp;
}
}
}
网友评论