排序算法:【插入排序】

一、插入排序:时间复杂度O(n^{2})、原地排序

原理:可以想象成打扑克牌时候,发到手里的牌,我们一张一张拿起来插到手里牌的适当位置。

        将待排序列表的第一个元素看作是一个有序序列(或叫有序区),然后从第二个元素开始,一直到最后一个元素,都看作无序区。现在从头到尾,一个一个的将无序区的元素,插到有序区的适当位置

        也就是说:刚开始时,我们手里(也就是有序区),只有一张牌,现在我们每次从无序区摸一张牌,插到自己手里牌的适当位置。

        也就是说,将第一个元素看作是一个有序的列表,从第二个元素开始,将这个元素与有序区里的元素进行比较,找到合适的插入位置,同时,把插入位置后面的元素依次向后移一个位置,或者叫向右移一个位置

具体做法:

1、将待排序列表的第一个元素看作是一个有序序列(有序区),第二个元素到最后一个元素,看作无序序列(无序区)。

2、取无序区里的第一个元素,比如a,将a与有序区最后一个元素进行比较,比如b,如果a>b,就把a放到b的后面,如果a<b,则把b向后移一个位置,然后再拿b前面那个数跟a进行比较,如果a还是比它小,就把b再往后移一个位置,把b前面的那个数也往自己原来的位置再向右移一个位置,以此类推,直到把a放到合适的位置,使得把a放进去之后,有序区依然是排好序的。

3、重复上个步骤,继续插入下个数据。

代码:

def insert_sort(li):for i in range(1, len(li)):  # i表示摸到的牌,它的下标temp = li[i]  # 摸到的牌j = i - 1  # j表示手里的牌,它的下标while j >= 0 and li[j] > temp:li[j + 1] = li[j]  # 手里的牌往右移一个位置j -= 1li[j + 1] = templ1 = [3, 2, 4, 1]
insert_sort(l1)
print(l1)# 结果:
[1, 2, 3, 4]

查看每次插入排序的结果:

def insert_sort(li):for i in range(1, len(li)):  # i表示摸到的牌,它的下标temp = li[i]  # 摸到的牌j = i - 1  # j表示手里的牌,它的下标while j >= 0 and li[j] > temp:  # 找到合适的插入位置li[j + 1] = li[j]  # 手里的牌往右移一个位置j -= 1li[j + 1] = tempprint(li)  # !! 每次插入一个值后的结果l1 = [3, 2, 4, 1]
print(l1)
insert_sort(l1)# 结果:
[3, 2, 4, 1]
[2, 3, 4, 1]
[2, 3, 4, 1]
[1, 2, 3, 4]

解释:

[3, 2, 4, 1]
[2, 3, 4, 1]
[2, 3, 4, 1]
[1, 2, 3, 4]

首先第一行:表示待排序列表:[3, 2, 4, 1],其中,3是有序区

然后把2插进来,得到:[2, 3, 4, 1];其中,红色表示有序区

把4插进来,得到:[2, 3, 4, 1],

最后把1插进来,得到:[1, 2, 3, 4]

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ESP8266模块(CH340)零基础实战

USB数据线连接ESP8266模块到电脑 先按住FLASH键,再按一下RST键,然后松开 此时电脑可识别出CH340 COM接口 CH340芯片厂商网址: wch.cn 传输比特率9600 win11自带驱动 下载Arduino IDE

数据科学实践:探索数据驱动的决策

写在前面 你是否曾经困扰于如何从海量的数据中提取有价值的信息?你是否想过如何利用数据来指导你的决策,让你的决策更加科学和精确?如果你有这样的困扰和疑问,那么你来对了地方。这篇文章将引导你走进数据科学的世界,探索数据驱动的决策。 1.数据科学的基本原则 在我们…

现货黄金会面临哪些风险?

进行现货黄金投资&#xff0c;我们除了要了解怎么找到交易机会以外&#xff0c;也要知道我们交易会面临哪些风险&#xff0c;了解风险就是做到知己知彼&#xff0c;了解风险才能控制风险。控制住风险&#xff0c;才能为我们稳定盈利打好基础&#xff0c;那么下面我们就来看看在…

力扣108. 将有序数组转换为二叉搜索树(三种思路)

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 > 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5…

如何在Linux本地部署openGauss开源数据管理系统并结合内网穿透公网访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…

AI:94-基于深度学习的微小目标检测与定位

🚀 本文选自专栏:人工智能领域200例教程专栏 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的核心代码,详细讲解供大家学习,希望可以帮到大家。欢迎订阅支持,正在不断更新…

decomposition-based multi-objective algorithm4SPDPTW

关键词 文章概述 研究背景 多目标选择性接送和配送问题&#xff08;PDPs&#xff09;&#xff1a;研究涉及多目标选择性接送和配送问题&#xff0c;这些问题传统上从单一目标角度进行探讨&#xff0c;以寻找最具盈利性的请求集合&#xff0c;同时遵守一系列限制条件。 经济和…

批量操作Excel的四个方法(求和、移动、对比、合并)

Excel文件肯定少不了保存大量数据&#xff0c;那么在使用excel的时候会不会要大批量数据进行操作&#xff1f;今天分享4个快速使用excel操作的小技巧。希望能够帮大家提高excel制作效率。 技巧一&#xff1a;快速求和 当你想要分别得到行列的总和&#xff0c;我们可以选中表格…

System 2 Attention:可以提高不同LLM问题的推理能力

推理正在成为大型语言模型(llm)关注的下一个主要领域。尽管llm拥有先进的能力&#xff0c;但大多数llm经常被简单的错误绊倒&#xff0c;显示出他们在推理方面的局限性。这些模型可能会被上下文中的不相关细节所误导&#xff0c;或者受到输入提示中的偏差的影响。而后一种倾向被…

openlayers-19-分屏对比

分屏对比实现很简单&#xff0c;定义两个map对象&#xff0c;然后让这两个map对象共用一个view即可。 代码如下&#xff1a; <!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd…

(纯原创) 基于SSM 的商城购物系统(完整源代码以及开发文档)

摘要 本网上商城系统以SSM架构、使用Mybatis&#xff0c;数据库使用MySQL&#xff0c;这些技术目前相对比较成熟&#xff0c;方便系统的维护与扩展。网上商城系统前台包括了用户注册、用户登录、商品查询、商品添加到购物车、删除商品等几大功能&#xff1b;后台管理功能则包…

vue 中国省市区级联数据 三级联动

vue 中国省市区级联数据 三级联动 安装插件 npm install element-china-area-data5.0.2 -S 当前版本以测试&#xff0c;可用。组件中使用了 element-ui, https://element.eleme.cn/#/zh-CN/component/installation 库 请注意安装。插件文档 https://www.npmjs.com/package/ele…