排序算法(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)

相关推荐
熊猫_豆豆2 分钟前
基于A*算法的雷雨绕飞路径MATLAB实现
算法·matlab·航天·a星算法
_F_y7 分钟前
二分:山脉数组的峰顶索引、寻找峰值、寻找旋转排序数组中的最小值、点名
c++·算法
Elias不吃糖10 分钟前
克隆图(LeetCode 133)——用数组做映射的 DFS 解法
c++·算法·leetcode·深度优先
iiiiii1120 分钟前
【论文阅读笔记】IDAQ:离线元强化学习中的分布内在线适应
论文阅读·人工智能·笔记·学习·算法·机器学习·强化学习
秋深枫叶红21 分钟前
嵌入式第二十三篇——数据结构基本概念
linux·数据结构·学习·算法
Zsy_05100328 分钟前
【数据结构】二叉树介绍及C语言代码实现
c语言·数据结构·算法
Ayanami_Reii28 分钟前
基础数学算法-移棋子游戏
数学·算法·游戏·博弈论·sg函数
谁刺我心30 分钟前
蓝桥杯C++常用STL
c++·算法·蓝桥杯
wubba lubba dub dub75033 分钟前
第二十七周 学习周报
学习·算法·机器学习
小白程序员成长日记36 分钟前
力扣每日一题 2025.11.30
数据结构·算法·leetcode