美文网首页
时间复杂度为O(n^2)的排序

时间复杂度为O(n^2)的排序

作者: bigFaceMm | 来源:发表于2019-10-30 17:24 被阅读0次

    /**

    * Created by PhpStorm.

    * User: shinho01

    * Date: 2019/9/11

    * Time: 16:11

    */

    /**

    * 冒泡排序只涉及相邻数据的交互操作,只需要常量集的临时空间,所以空间复杂度为1,是原地排序算法

    * 相同大小的元素可以不做交换

    * 最坏的时间复杂度是O(n^2),最好情况的复杂度是O(1)

    * @param $arr

    * @return mixed

    */

    function bubbleSort(&$arr)

    {

        $n = count($arr);

        if ($n <= 1) {

            return;

        }

        for ($i = 0; $i < $n; $i++) {

            $flag = false;

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

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

                    $tmp = $arr[$j];

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

                    $arr[$j+1] = $tmp;

                    $flag = true;

                }

    }

            if (!$flag) {

                break;

            }

    }

    }

    /**

    * 插入排序(左右两部分(已排序和未排序))

    * 插入排序的空间复杂度是O(1)

    * 是稳定的排序算法

    * 最好的时间复杂度是O(N),最坏情况时间复杂度是O(n^2)

    * @param $arr

    */

    function insertSort(&$arr)

    {

        $n = count($arr);

        if ($n <= 1) {

            return;

        }

        for ($i=1; $i< $n; $i++) {

            $value = $arr[$i];

            $j = $i-1;

            for (;$j >= 0; --$j) {

                if ($arr[$j] > $value) {

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

                } else {

                    break;

                }

    }

            $arr[$j+1] = $value;

        }

    }

    /**

    * 空间复杂度O(1),是一种原地排序

    * 最好情况和最坏情况的时间复杂度都是O(n^2)

    * 非稳定排序算法

    * 选择排序

    * @param $arr

    */

    function selectSort(&$arr)

    {

        $n = count($arr);

        if ($n <= 1) {

            return;

        }

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

            $p = $i;

            for ($j=$i+1; $j < $n; $j++) {

                if ($arr[$p] > $arr[$j]) {

                    $p = $j;

                }

    }

            if ($p = $i) {

                continue;

            }

            $tmp = $arr[$i];

            $arr[$i] = $arr[$p];

            $arr[$p] = $tmp;

        }

    }

    $arr = [9,2,4,6,2,5,9,1,4,6];

    bubbleSort($arr);

    insertSort($arr);

    print_r($arr);

    相关文章

      网友评论

          本文标题:时间复杂度为O(n^2)的排序

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