三、插入排序

原理

插入排序模拟了我们打扑克牌的方式,从队列起始位置开始,逐一取出和之前已经排好顺序的数字比较,并在合适的位置将其插入。

步骤

  1. 第一轮从下标 1 的位置开始,和下标为 0 位置的数比较,如果比它小就插入到它前面。
  2. 接着把下标 2 位置数和 下标 0 以及 1 位置的数字比较,插入到合适的位置。
  3. 以此类推,直到最后一个数字。

插入排序

此图来自:runoob.com 插入排序

代码

<?php declare(strict_types=1);

class Algorithm
{
    public function insertionSort(array $s): array
    {
        $e = count($s) - 1;
        for ($i = 1; $i <= $e; $i++) {
            for ($j = $i; $j > 0; $j--) {
                if ($s[$j] > $s[$j-1]) break;
                [$s[$j], $s[$j-1]] = [$s[$j-1], $s[$j]];
            }
        }
        return $s;
    }
}

时间复杂度

两层 n 次循环:O(n²)

最好情况(数组本身就是由小到大排序):O(n)

最坏情况(数组本身就是由大到小排序):O(n²)

空间复杂度

循环中并无开辟并占据内存空间:O(1)

本作品采用《CC 协议》,转载必须注明作者和本文链接
xiaer
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!