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

一、插入排序的算法思想

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

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

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

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

二、插入排序的算法步骤

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

三、基于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]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/535971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PS入门|如何让模糊的图片变得清晰?

前言 前段时间的PS入门讲的都是如何抠图、抠图、抠图。小白都快抠出三室一厅了&#xff0c;不知道学习的小伙伴如何了。 如果在学习过程中没有练习的照片&#xff0c;那直接使用每一篇文章的照片即可&#xff0c;学PS最忌讳的就是光看不练&#xff0c;眼睛会了&#xff0c;手…

基于WEB的水库水情自动测报系统的研究与设计(论文+源码)_kaic

摘要 水情信息是水利管理最重要的基础信息&#xff0c;是水文预报、水资源管理、防汛抗旱决策的主要依据。水情自动测报系统是一个自动采集、传输、处理水情信息的实时测报系统&#xff0c;可对水库流域内的水情、水文和气象数据&#xff0c;如雨量、流量、水位等&#xff0c;实…

利用AbortController,取消正在发送的请求

参考文章&#xff1a;https://blog.csdn.net/qq_45560350/article/details/130588101 解决问题&#xff1a;再图层中点击仓库的时候&#xff0c;点击后又取消掉&#xff0c;我们希望这个请求可以被取消掉&#xff0c;我们口可以利用AbortController控制器对象 实操&#xff1a…

linux 以jar包的方式部署后端程序

打包&#xff0c;以及linux上的位置 然后执行下面两个命令&#xff0c;一个多服务启动&#xff0c;一个是单服务启动 多服务启动命令 #!/bin/bash# 设置JAR包的目录 JAR_DIR"/bpm/app_jar"# 设置JAR包的名称&#xff0c;用空格分隔 # JAR_NAMES"platform-gate…

Paper Reading: MixTeacher:半监督目标检测中利用混合尺度教师挖掘有前景的标签

目录 简介目标/动机工作重点方法训练 实验总结 简介 题目&#xff1a;《MixTeacher: Mining Promising Labels with Mixed Scale Teacher for Semi-Supervised Object Detection》&#xff0c; CVPR 2023 日期&#xff1a;2023.3.16 单位&#xff1a;腾讯&#xff0c;上海交…

Ceph学习 -4.Ceph组件介绍

文章目录 1.Ceph组件介绍1.1 组件介绍1.2 流程解读1.2.1 综合效果图1.2.2 数据存储逻辑 1.3 小结 1.Ceph组件介绍 学习目标&#xff1a;这一节&#xff0c;我们从组件介绍、流程解读、小结三个方面来学习。 1.1 组件介绍 无论是想向云平台提供 Ceph 对象存储和 Ceph 块设备服务…

Go语言mac环境搭建详解

Go语言mac环境搭建详解见视频&#xff0c;视频下方也有讲解具体的操作步骤。 Golang Mac电脑环境搭建、开发工具Vscode配置 Go语言mac环境搭建步骤如下&#xff1a; 1、下载安装Golang Go官网下载地址&#xff1a;https://golang.org/dl/ Go官方镜像站&#xff08;推荐&…

大数据架构的演变与多种大数据架构类型说明——解读大数据架构(一)

文章目录 前言数据架构的演变关系型数仓数据湖现代数仓数据网络数据湖仓数据网格 前言 在搭建和使用大数据组件前&#xff0c;预先投入时间设计和构建正确的数据架构绝对至关重要。如果在前期没有设计正确的数据架构就开始实施方案&#xff0c;在后期想更改架构设计是十分困难…

uniapp-IOS自定义启动页面模版的修改

启动界面设置 在打包IOS包时&#xff0c;需要我们选择app的启动页面配置 在HBuilderX内&#xff0c;有三个样式的选择 第一个&#xff0c;是通用界面&#xff0c;就是一个启动页是一个圆形的应用图标加上应用名称 第二个&#xff0c;自定义的启动图&#xff0c;目前无法通过App…

企业级网络安全:入侵防御实时阻止,守护您的业务安全

随着互联网技术的快速发展&#xff0c;企业级网络安全问题日益凸显。在这个数字化时代&#xff0c;企业的业务安全不仅关系到企业的形象和声誉&#xff0c;还直接影响到企业的生存和发展。因此&#xff0c;加强企业级网络安全&#xff0c;预防和抵御各种网络攻击已成为企业的重…

lua学习笔记17(面相对象之继承)

print("*****************************面相对象继承*******************************") object{} object.id1 function object:new()local obj{}self.__indexself setmetatable(obj,self)return obj end function object:text()--面相对象的类其实就是基于table来实现…

备考ICA----Istio实验20---跨网络Primary-Remote主从架构部署

备考ICA----Istio实验20—跨网络Primary-Remote主从架构部署 按照本实验在 cluster1&#xff08;主集群&#xff09;上安装 Istio 控制平面&#xff0c;并将 cluster2&#xff08;远程集群&#xff09;配置为使用 cluster1 中的控制平面。群集 cluster1 在 network1 网络上&am…

基于Springboot的笔记记录分享网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的笔记记录分享网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

提升法律文书起草效率:AlphaGPT 助力律师快速生成诉讼和仲裁文件

法律文书起草对于法律专业人士而言是一项基础而关键的任务。无论是民事、刑事还是行政诉讼&#xff0c;以及仲裁案件&#xff0c;精确的法律文书撰写对于案件的成功至关重要。然而&#xff0c;这一过程往往既耗时又复杂&#xff0c;尤其是在处理复杂的案情和面对当事人难以理解…

浅谈网络安全威胁与防御策略

企业网络安全威胁概述 外部威胁&#xff1a;来自网络安全威胁&#xff0c;比如DDOS攻击&#xff0c;病毒&#xff0c;sql注入&#xff0c;木马&#xff0c;蠕虫&#xff0c;等网络入侵&#xff0c;网络扫描&#xff0c;垃圾邮件&#xff0c;钓鱼邮件&#xff0c;针对web的攻击…

Docker Redis Debian服务器版

1.使用官方安装脚本自动安装docker 安装命令如下&#xff1a; curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.sh 如果安装提示 -bash sudo command not found 则需要 #update sudo apt-get update sudo apt-get install sudo再执行安装脚本1 安装…

WS2812B彩灯

目录 1、介绍 2、参数 3、引脚功能 4、应用电路 5、Code 1、介绍 WS2812是一种智能控制LED灯源&#xff0c;集成了控制电路和RGB芯片在一个5050封装组件中。它的主要特点和技术规格如下&#xff1a; 集成设计&#xff1a;WS2812将控制电路和RGB芯片集成在同一个封装中&…

Redis(三) String字符串

文章目录 前言常见命令SETGETMSETMGETINCRINCRBYDECRDECRBYINCRBYFLOATAPPENDGETRANGESETRANGESTRLEN命令小结 前言 Redis 的数据有很多种数据类型&#xff0c;包括字符串类型、列表类型、哈希类型、集合类型、有序集合类型等。这几种数据类型是针对于 value 来说的&#xff0…

数据应用OneID:ID-Mapping Spark GraphX实现

前言 说明 以用户实体为例&#xff0c;ID 类型包含 user_id 和 device_id。当然还有其他类型id。不同id可以获取到的阶段、生命周期均不相同。 device_id 生命周期通常指的是一个设备从首次被识别到不再活跃的整个时间段。 user_id是用户登录之后系统分配的唯一标识&#xff…

ELK及ELFK排错

目录 一、ELK及ELFK排错思路 1.1filebeat侧排查 1.2logstash侧排查 1.3ES、kibana侧问题 一、ELK及ELFK排错思路 1.1filebeat侧排查 第一步&#xff1a;排查filebeat上的配置文件有没有写错&#xff0c;filebeat的配置文件是yml文件&#xff0c;一定要注意格式。 第二步…