美文网首页
php实现冒泡排序

php实现冒泡排序

作者: 云龙789 | 来源:发表于2018-04-26 14:06 被阅读26次

    原数组

    $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;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:php实现冒泡排序

          本文链接:https://www.haomeiwen.com/subject/vhiplftx.html