【算法练习】29:插入排序学习笔记

news/2024/5/17 9:48:03

一、插入排序的算法思想

        原理:将一个无序的数据序列逐步转化为有序序列。算法将待排序的数组分为两个部分已排序部分和未排序部分。

        时间复杂度:插入排序的时间复杂度在最坏、平均和最好情况下的表现相同,均为 O(n^2),其中 n 是待排序数组的长度。这是因为无论输入数组如何分布,插入排序都需要对每个元素进行一次遍历(寻找插入位置),并且在最坏情况下,每次插入可能都需要移动已排序部分的所有元素。因此,总的操作次数与数组长度的平方成正比。

        空间复杂度:插入排序是原地排序算法,它不需要额外的存储空间来保存数据副本。在进行元素插入时,只需要常数级别的临时空间用于交换元素或者存储中间值。因此,插入排序的空间复杂度为O(1),即空间复杂度与输入数组的大小无关。

        稳定性:稳定,在插入排序过程中,当遇到相等键值的元素时,只会将待插入元素放置在已排序部分中相等元素的后面,不会改变相等元素之间的原有顺序,故保持了稳定性。

二、插入排序的算法步骤

  1. 初始化阶段:一开始时已排序部分仅包含数组的第一个元素,被视为已排序。
  2. 遍历数组:每次从未排序部分取出一个元素,将其按正确的顺序插入到已排序部分的适当位置。
  3. 比较元素:从待插入元素开始,向前遍历已排序部分,比较待插入元素与当前元素的大小,若待插入元素较小,则将当前元素向后移动一位,直到找到合适的位置或到达已排序部分的起始处。然后将待插入元素插入到这个位置,保证插入后已排序部分依然保持有序。
  4. 重复执行:随着每次迭代,已排序部分不断增长,未排序部分相应减小,直到整个数组变为已排序状态。

        本文是自己的算法学习笔记,这里超级推荐一个开源算法项目,链接我放在这里了!非常感谢开源大佬:《hello算法》插入排序

三、基于Python的插入排序实现

def insertion_sort(arr):# 遍历从第二个元素开始到最后一个元素for current in range(1, len(arr)):# 当前待插入元素key = arr[current]# 已排序部分的最后一个元素的索引sorted_end = current - 1# 将当前元素与已排序部分的元素进行比较并移动while sorted_end >= 0 and key < arr[sorted_end]:arr[sorted_end + 1] = arr[sorted_end]sorted_end -= 1# 在正确位置插入当前元素arr[sorted_end + 1] = key# 示例
arr = [5, 2, 4, 6, 1, 3]
insertion_sort(arr)
print(arr)  # 输出: [1, 2, 3, 4, 5, 6]


http://www.mrgr.cn/p/34308650

相关文章

flutter+Springboot的结合

我们团队的开发 前端采用flutter 后端采用spring boot 首先 完成了app的图标名字的修改 在app/src/main/res/mipmap 目录中 存放app图标 图片 在AndroidManifest.xml 文件中 修改对应的 名字 和图标 打开后是 我们的主页面 首先进来的是 主页面 但是各种功能无法使用 必须登录后…

在Windows安装R语言

直接安装R语言软件 下载网址&#xff1a;R: The R Project for Statistical Computing 下载点击install R for the first time 通过Anaconda下载RStudio 提前下载好Anaconda 点击Anaconda Navigate 点击RStudio的Install下载就好了

第二部分 Python提高—GUI图形用户界面编程(三)

简单组件学习 Radiobutton 单选按钮、Checkbutton 复选按钮和canvas 画布 文章目录 Radiobutton 单选按钮Checkbutton 复选按钮canvas 画布 Radiobutton 单选按钮 Radiobutton 控件用于选择同一组单选按钮中的一个。Radiobutton 可以显示文本&#xff0c;也可以显示图像。 f…

如何在忘记密码情况下更改Windows 10用户的密码?这里有详细步骤

如果你想更改登录用户的Windows 10密码,当你不知道当前或旧用户密码时,这篇文章已经准备好让你学习如何操作了。 使用默认管理员更改Windows 10用户密码 如果我们启用了默认管理员,那么即使我们忘记了Windows 10用户密码,我们也可以使用内置管理员访问计算机,并在没有任…

Python分析之3 种空间插值方法

插值是一个非常常见的数学概念,不仅数据科学家使用它,而且各个领域的人们也使用它。然而,在处理地理空间数据时,插值变得更加复杂,因为您需要基于几个通常稀疏的观测值创建代表性网格。 在深入研究地理空间部分之前,让我们简要回顾一下线性插值。 为了演示的目的,我将使…

快速学习nginx反向代理

反向代理 nginx方向代理配置nginx反向代理nginx负载均衡配置 nginx方向代理 将前端发送的动态请求由nginx转发到后端服务器 nginx反向代理的好处&#xff1a; 提高访问速度 nginx中提供缓存机制&#xff0c;有一些数据在进行访问的时候无需访问后端服务器之间由nginx返回数据 …

使用JSZip实现在浏览器中操作文件与文件夹

使用JSZip来实现在浏览器中创建文件与文件夹1. 引言 浏览器中如何创建文件夹、写入文件呢? 答曰:可以借助JSZip这个库来实现在浏览器内存中创建文件与文件夹,最后只需下载这个.zip文件,就是最终得结果 类似的使用场景如下:在线下载很多图片,希望这些图片能分类保存到各个…

基于XML配置bean(二)

文章目录 1.工厂中获取bean1.静态工厂1.MyStaticFactory.java2.beans.xml3.测试 2.实例工厂1.MyInstanceFactory.java2.beans.xml3.测试 3.FactoryBean&#xff08;重点&#xff09;1.MyFactoryBean.java2.beans.xml3.测试 2.bean配置信息重用继承抽象bean1.beans.xml2.测试 3.…

rabbitMQ入门教程(商品抢购实战)

什么是MQ? 官方地址: https://www.rabbitmq.com/docsMQ有什么用? docker方式 安装: docker run \ -e RABBITMQ_DEFAULT_USER=yourame \ -e RABBITMQ_DEFAULT_PASS=123456 \ -v mq-plugins:/plugins \ --name mq \ --hostname mq \ -p 15672:15672 \ -p 5672:5672 \ --…

网络基础-基于TCP协议的Socket通讯

一、Socket通讯基于TCP协议流程图 UDP 的 Socket 编程相对简单些不在介绍。 二、 服务端程序启动 服务端程序要先跑起来&#xff0c;然后等待客户端的连接和数据。 服务端程序首先调用 socket() 函数&#xff0c;创建网络协议为 IPv4&#xff0c;以及传输协议为 TCP 的…

强大的数据分析计算软件:Stata 15 for Mac 激活版

Stata 15 for Mac是一款高级统计分析软件&#xff0c;具有强大的数据管理和数据提取工具。以下是其功能和特点的详细介绍&#xff1a; 软件下载&#xff1a;Stata 15 for Mac 激活版版下载 数据管理&#xff1a;Stata 15 for Mac支持多种数据库、数据格式和计算机语言&#xff…

《QT实用小工具·二十九》托盘图标控件

1、概述 源码放在文章末尾 托盘图标控件 可设置托盘图标对应所属主窗体。 可设置托盘图标。 可设置提示信息。 自带右键菜单。 下面是demo演示&#xff1a; 项目部分代码如下&#xff1a; #ifndef TRAYICON_H #define TRAYICON_H/*** 托盘图标控件* 1. 可设置托盘图标…

【详细的Kylin使用心得】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

1.Chinese Tiny LLM_ Pretraining a Chinese-Centric Large Language Model

文章目录 摘要一、背景二、预训练数据统计信息数据处理 模型架构 三、SFT四、Learning from Human Preferences五、评估数据集和指标训练过程和比较分析安全性评估中文硬指令理解与遵循评价 六、结论 https://arxiv.org/abs/2404.04167https://github.com/Chinese-Tiny-LLM/Chi…

数据湖/数据仓库

数据湖&#xff08;Data Lake&#xff09;和数据仓库&#xff08;Data Warehouse&#xff09;的主要区别在于它们的目的、存储的数据类型、数据处理方式、数据结构、数据安全性以及数据应用。以下是相关介绍&#xff1a; 目的。数据湖旨在作为一个集中的存储库&#xff0c;存储…

软件无线电安全之GNU Radio基础 -上

GNU Radio介绍 GNU Radio是一款开源的软件工具集&#xff0c;专注于软件定义无线电&#xff08;SDR&#xff09;系统的设计和实现。该工具集支持多种SDR硬件平台&#xff0c;包括USRP、HackRF One和RTL-SDR等。用户可以通过GNU Radio Companion构建流程图&#xff0c;使用不同…

常见分类算法

一、ChatGPT 在人工智能和机器学习领域&#xff0c;分类算法是一种监督学习技术&#xff0c;用来识别输入数据所属的类别。以下是一些常见的分类算法&#xff1a; 1. 决策树&#xff08;Decision Trees&#xff09;: 决策树通过创建一系列的问题或决策&#xff0c;来将数据…

【无标题】PHP-parse_str变量覆盖

[题目信息]&#xff1a; 题目名称题目难度PHP-parse_str变量覆盖1 [题目考点]&#xff1a; 变量覆盖指的是用我们自定义的参数值替换程序原有的变量值&#xff0c;一般变量覆盖漏洞需要结合程序的其它功能来实现完整的攻击。 经常导致变量覆盖漏洞场景有&#xff1a;$$&…

HarmonyOS-基础之状态数据共享

1、LocalStorage页面级UI状态存储,通常用于UIAbility内、页面间的状态共享(1) 先抛出一个疑问疑问:如何实现一个页面中所有组件的数据共享?解决:使用LocalStorage技术(2) 页面级状态内存存储只能在一个页面中的所有组件中共享 退出应用不存在(3) 相关APILocalStorage({name…

vue中使用aplayer插件做一个网页音乐播放器

我们在浏览网页的时候,时常会看到一些网页音乐播放器,本文以vue为例,使用aplayer插件,做一个简单的网页播放器。我们先看一下效果图效果图正常模式吸底模式当然还有迷你模式,就是能隐藏的都隐藏,这里不赘述,做相应配置就会出现对应效果。注意,吸底模式会出现上一曲下一…