排序算法(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 小时前
知识图谱实战(一):数据采集与实体关系抽取(完整代码)
算法
Mem0rin15 小时前
前缀和:中心下标与数组乘积
数据结构·算法
windliang15 小时前
Claude Code 源码分析(八):Memory 如何被写入、整理与按需召回
前端·算法·面试
漂流瓶jz15 小时前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
Forever Nore15 小时前
LeetCode 6 Z 字形变换 - 按行模拟
算法·leetcode
fkyyly16 小时前
hermes解读
算法·code_agent
过期的秋刀鱼!16 小时前
使用都热编码的分类特征
人工智能·算法·决策树·机器学习·分类·数据挖掘
wabs66616 小时前
关于哈希表【力扣383.赎金信的思考】
算法·leetcode·散列表
love_muming16 小时前
二叉树操作全解析:从递归到层序遍历
java·数据结构·算法·二叉树
.道阻且长.1 天前
2.LeetCode算法习题讲解--双指针--复写零
算法·leetcode·职场和发展