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

相关推荐
学习3人组7 小时前
柔性排产时序算法+中间过程+阶段目标 细化表格
算法·mes
he___H7 小时前
算法快与慢--哈希+双指针
算法·leetcode·哈希算法
呃呃本7 小时前
算法题(回溯)
算法
刀法如飞7 小时前
Rust数组去重的20种实现方式,AI时代用不同思路解决问题
人工智能·算法·ai编程
yxc_inspire7 小时前
25年CCPC福建邀请赛补题
学习·算法
Raink老师7 小时前
用100道题拿下你的算法面试(链表篇-4):合并 K 个有序链表
算法·链表·面试
Liangwei Lin8 小时前
LeetCode 20. 有效的括号
算法
IronMurphy8 小时前
【算法四十四】322. 零钱兑换
算法
凯瑟琳.奥古斯特8 小时前
力扣2760 C++滑动窗口解法
数据结构·c++·算法·leetcode·职场和发展
Hesionberger8 小时前
LeetCode96: 不同的二叉搜索树(多解)
算法