美文网首页
时间复杂度为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);

相关文章

  • 算法与数据结构之排序(Swift版)

    1、冒泡排序 时间复杂度为O(n²) 2、选择排序 时间复杂度为O(n²) 3、插入排序 时间复杂度为O(n²)

  • 排序算法

    选择排序 选择排序最好的时间复杂度为:O(n^2)。选择排序的最坏时间复杂度为:O(n^2)。选择排序总的平均时间...

  • 算法基础|排序算法时间复杂度

    常见的7种排序算法时间复杂度: 1)直接插入排序,时间复杂度为O(n)~O(n²) 2)冒泡排序,时间复杂度为O(...

  • 【笔记-排序】

    排序平均时间复杂度最差时间复杂度最好时间复杂度稳定性冒泡排序O(n^2)O(n^2)O(n)稳定选择排序O(n^2...

  • 数据结构的js描述

    沈冬冬 冒泡排序 时间复杂度O(n^2) 稳定 选择排序 时间复杂度为O(n^2) 不稳定 插入排序 时间复杂...

  • 算法——排序算法

    冒泡排序 时间复杂度:O(n2) 空间复杂度:O(1) 稳定排序 选择排序 时间复杂度:O(n2) 空间复杂度:O...

  • 排序算法

    待排序列正序时,直接插入排序的时间复杂度为O(n)希尔排序的时间复杂度为O(n3/2)

  • LeetCode-排序算法

    LeetCode-排序算法 时间复杂度 排序算法平均时间复杂度冒泡排序O(n2)选择排序O(n2)插入排序O(n2...

  • 2020-11-19 排序算法一(冒泡和快排多种实现)

    主流的排序算法 时间复杂度为O(n^2):冒泡排序选择排序插入排序希尔排序(介于O(n^2)与O(nlogn)之间...

  • PHP实现冒泡排序

    冒泡排序属于交换排序,是一种稳定排序,平均时间复杂度为O(n^2),最好情况时间复杂度为O(n),最坏情况时间复杂...

网友评论

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

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