美文网首页
php冒泡排序

php冒泡排序

作者: 进击的PHPer | 来源:发表于2019-03-11 10:42 被阅读0次

    思路就是一组一组数字(相邻的两个数)比较,如果大于后面的数字就发生交换,这样比较完的结果就是会把最大的数移动到最后的位置。

    $numbers = array(-2, 5, 3, 1, -3, -4);

    for ($i = 0; $i < count($numbers)-1; $i++) {

        for ($j = 0; $j < count($numbers) - $i - 1; $j++) {

            if ($numbers[$j] > $numbers[$j + 1]) {

                $temp = $numbers[$j];

                $numbers[$j] = $numbers[$j + 1];

                $numbers[$j + 1] = $temp;

            }

        }

        var_dump($numbers);

    }

    第一轮交换完过程就是: -2不大于5不交换,5大于3交换,5大于1交换,5大于-3交换,5大约-4交换....

    结果: [-2, 3, 1, -3, -4,5]

    ...

    第二轮交换的时候,注意条件$j < count($numbers) - $i - 1; 已经不跟最后一个比较了,因为你懂的...

    关于优化

    如果数组是: [5,1,2,3,4] 套用我们第二种思路的话, 是不是我们第一轮循环完(结果是[1,2,3,4,5]), 就可以终止循环了.

    加个变量,如果里面没有发生交换,就意味着数组目前就是有序的,可以退出循环了

    $numbers = [5,1,2,3,4];

    for ($i = 0; $i < count($numbers)-1; $i++) {

        $flag = 1;

        for ($j = 0; $j < count($numbers) - $i - 1; $j++) {

            if ($numbers[$j] > $numbers[$j + 1]) {

                $flag = 0;

                $temp = $numbers[$j];

                $numbers[$j] = $numbers[$j + 1];

                $numbers[$j + 1] = $temp;

            }

        }

        if($flag) break;

    }

    var_dump($numbers);exit;

    相关文章

      网友评论

          本文标题:php冒泡排序

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