php实现冒泡排序

2018-04-26  本文已影响26人  云龙789

原数组

$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;
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读