排序算法(3):插入排序

问题

排序 30, 24, 5, 58, 18, 36, 12, 42, 39

插入排序

插入排序将序列分为已排序和未排序两部分,每次从未排序部分取出第一个元素,插入到已排序部分的适当位置。重复此过程直到所有元素排序完成。

图解

  1. 初始化第一个元素为已排序部分,从未排序部分取第一个元素,插入到已排序部分的适当位置,主要是通过将大于待排序元素的位置后移
  2. 重复上述过程直到所有元素完成排序

代码

py 复制代码
def insertion_sort(nums):
    n = len(nums)
    for i in range(1, n):
        key = nums[i]
        j = i - 1

        while j >= 0 and key < nums[j]:
            nums[j + 1] = nums[j]	# 将大于目标值的元素后移
            j -= 1

        nums[j + 1] = key
    return nums

时间复杂度

插入排序的时间复杂度为 O(n2)

相关推荐
徐凤年_14 小时前
rog_map参数理解
算法
春日见14 小时前
算法与数据结构----哈希表
数据结构·人工智能·算法·机器学习·自动驾驶·哈希算法·散列表
叩码以求索15 小时前
统计按位或能得到最大值的子集数目(一)
数据结构·算法
tachibana215 小时前
hot100 数组中的第K个最大元素(215)
java·数据结构·算法·leetcode
txzrxz15 小时前
单调队列讲解
数据结构·c++·算法·单调队列
不会就选b16 小时前
算法日常・每日刷题--<快排>4
算法
Keven_1116 小时前
算法札记:树状数组的用途
数据结构·算法
用户6774371758116 小时前
C++函数参数传递方式详解:string、string&、const string、const string&该怎么选?
算法
cpp_250117 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
晚笙coding17 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展