当前位置: 首页 > article >正文

插入排序(insertion sort)

插入排序(insertion sort)是一种简单的排序算法,它的工作原理与手动整理一副牌的过程非常相似。

具体来说,我们在未排序区间选择一个基准元素,将该元素与其左侧已排序区间的元素逐一比较大小,并将该元素插入到正确的位置。
在这里插入图片描述插入排序的整体流程。

初始状态下,数组的第 1 个元素已完成排序。
选取数组的第 2 个元素作为 base ,将其插入到正确位置后,数组的前 2 个元素已排序。
选取第 3 个元素作为 base ,将其插入到正确位置后,数组的前 3 个元素已排序。
以此类推,在最后一轮中,选取最后一个元素作为 base ,将其插入到正确位置后,所有元素均已排序。

在这里插入图片描述

def insertion_sort(nums: list[int]):
    """插入排序"""
    # 外循环:已排序区间为 [0, i-1]
    for i in range(1, len(nums)):
        base = nums[i]
        j = i - 1
        # 内循环:将 base 插入到已排序区间 [0, i-1] 中的正确位置
        while j >= 0 and nums[j] > base:
            nums[j + 1] = nums[j]  # 将 nums[j] 向右移动一位
            j -= 1
        nums[j + 1] = base  # 将 base 赋值到正确位置

在这里插入图片描述在这里插入图片描述


http://www.kler.cn/a/323108.html

相关文章:

  • MySQL缓存使用率超过80%的解决方法
  • 手机ip地址异常怎么解决
  • CDH安装与配置及相关大数据组件实践
  • 视频流媒体播放器EasyPlayer.js RTSP播放器视频颜色变灰色/渲染发绿的原因分析
  • 解决背景图因为图片路径中携带括号导致图片无法显示的问题
  • Dubbo 3.2 源码导读
  • self-supervised, weakly supervised, and supervised respectively区别
  • Django中媒体文件的配置
  • UnityHub下载任意版本的Unity包
  • C++ STL初阶(14): map和set
  • C#:动态为Object对象添加新属性的方法
  • Linux 命令 | 每日一学,文本处理三剑客之grep命令实践
  • ssh连接GitHub自定义密钥文件名
  • 【C++前缀和】2731. 移动机器人|1922
  • PHP foo()和@foo()之间有什么区别
  • GAMES101(17~18节,物理材质模型)
  • [go] 迭代器模式
  • 新手答疑 | 零基础该怎么学习嵌入式?嵌入式Linux学习路线是什么?嵌入式开发板推荐?
  • [sql-03] 求阅读至少两章的人数
  • 数据分析工具julius ai如何使用
  • vue 流式加载mp4文件
  • 视频汇聚/视频存储/安防视频监控EasyCVR平台RTMP推流显示离线是什么原因?
  • 秋招即将来临,AIGC 产品经理 快速入门方法论
  • 【计算机网络强化】计网强化笔记
  • http代理池子大小要如何判断?
  • 信息安全工程师(25)网络安全体系框架主要组成和建设内容