python数据结构与算法 32 插入排序

【数据结构与算法Python实践系列】5分钟学会经典排序算法-插入排序 5分钟学会插入排序 插入排序(Insertion Sort),一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。 阅读详情

插入排序

插入排序虽然仍然是O(n2),但工作模式就有稍微不同。它总是在列表的低端保持一个有序的子列表,后面的元素被逐个“插入”到前面的有序子表,这样有序的子表就逐渐变大。图4是插入排序的过程,阴影部分是排好序的子列表。


开始的时候我们假设一个只有一个元素(在0位上)的列表而且是有序的,每次遍历的时候,从1到n-1的每个元素,与有序的子列表进行比较。当回顾已经排序的子表时候,比当前元素大的向前移,当遇到一个比它小的元素或到达子表的终点时,当前元素就插在这个位置上。

如图5所示为一个第5次遍历的细节。这时已经生成一个有序的子表,包含17,26,54,77和93五个元素。下面要把31插入到这个子表中。先与93比较,93向右移动一个位置,然后是77和54也移动了,当遇到26时,停止移动,31放在空白位置上,这时就有序子表有6个元素了。


下面的实现代码insertionSort显示,仍然需要n-1次遍历来移动n个元素。迭代过程从1开始,到n-1,因为这些位置上的元素是需要向后插入到有序子表中的。第8行执行将元素向后移动的操作。记住这个操作与前面的算法相比,不是一个完整的交换过程。

插入排序最大需要前n-1个整数和次比对。所以这是一个O(n2),不过在最好的情况即有序列表的情况下,只需要一次遍历。另外要注意的是,移动元素位置相对交换两个元素的消耗。一般情况下,移动操作大概需要交换操作三分之一资源,因为移动只需要一次赋值操作。在性能测试中,插入排序显示了很好的性能。

def insertionSort(alist):
   for index in range(1,len(alist)):

     currentvalue = alist[index]
     position = index

     while position>0 and alist[position-1]>currentvalue:
         alist[position]=alist[position-1]
         position = position-1

     alist[position]=currentvalue

alist = [54,26,93,17,77,31,44,55,20]
insertionSort(alist)
print(alist)


Java算法与数据结构测试——插入排序 开始你的任务吧,祝你成功!arr:待排序的数组。 阅读详情

相关推荐

VMware + ubuntu20.04 + qemu安装

遇到报错可参考:(从ubuntu裸系统开始安装)

NosONE 3230

数据结构与算法Python版 插入排序与谢尔排序

介绍插入排序和谢尔排序算法,以及它们的Python实现。

分享、交流、合作 468

Windows打印体系结构之Windows内置打印驱动程序

时间是一种很残酷的东西,它只会冲淡能够冲淡的,但也会洗尽铅华帮你留下该留下的。1.3.4、Windows内置打印驱动程序现在的Windows下的打印机驱动程序通常分为V4打印机驱动程序(V4 Printer Driver)、XPS打印机驱动程序(XPSDrv)、微软通用打印机驱动程序(Microsoft UniversalPrinter Driver)、微软PostScri...

weixin_34309435的博客 2253

数据结构与算法(python):插入排序和谢尔排序算法及分析

参考自 MOOC数据结构与算法Python版 目录一、插入排序 Insertion Sort1.1 算法思路1.2 代码及算法分析二、谢尔排序Shell Sort1.1 算法思路1.2 代码及算法分析 一、插入排序 Insertion Sort 1.1 算法思路 插入排序维持一个已排好序的子列表, 其位置始终在列表的前部, 然后逐步扩大这个子列表直到全表。 【步骤】 第1趟, 子列表仅包含第1个数据项, 将第2个数据项作为“新项”插入到子列表的合适位置中, 这样已排序的子列表就包含了2个数据项 第2趟,

番茄大人的博客 340

【电击防护篇】电击防护技术详解:从人体效应到接地系统全解析

本文系统讲解了电击防护的关键知识,包括电流对人体的影响(如30mA是心室颤动阈值)、人体电阻特性(700Ω-6100Ω)以及电气接触防护措施。重点分析了TT、TN和IT三大接地系统的结构特点与应用场景,强调TN-S系统最安全,IT系统供电连续性最佳。详细介绍了漏电保护器(RCD)的工作原理与选型指南,建议人身防护选用30mA高灵敏度RCD。文章通过对比表总结三大系统的安全性、成本及适用场景,为电气安全设计提供实用参考。

2301_81299416的博客 1742

虚拟机器人平台CoppeliaSim(Vrep)的逆运动学教学

相信看这篇博客的人都知道CoppeliaSim是做什么的,因此这里不多赘述。CoppeliaSim从最早的Vrep到现在已经更新了N个版本,从过去Vrep3.x开始使用的我这里小小地吐槽一下这个软件。CoppeliaSim每一个版本都有更新,问题是这些更新有时候不能向前兼容,而且时不时更新地让人不知所措(对于有紧急任务的时候真的很火大啊)。 以本文所展示地逆运动学来说,CoppeliaSim在4.0.0之后又大变,推翻了过往所有的拖动模块链接之类的构建方式,转而采用直接通过代码来实现逆运动学。 简单版逆运动

qq_39243015的博客 6699

数据结构和算法-11-插入排序

继续学习简单排序算法中的第三种:插入排序,其实插入排序和选择排序很容易搞混淆。 1.插入排序概念和原理 插入排序(Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据, 在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序 元素进行逐步向后挪位,为最新元素提供插入空间。 2.插入排序图解 ...

Anthony_tester的博客 510

学Simulink——基于Simulink的Buck-Boost变换器双闭环PI+抗饱和设计建模示例

本文详细介绍了基于Simulink的非反相Buck-Boost变换器双闭环控制设计方法。针对Buck-Boost变换器特有的右半平面零点(RHPZ)和控制挑战,提出了电压-电流双闭环PI控制架构,并集成抗积分饱和机制。通过Simulink建模,实现了主电路、电流内环PI、电压外环PI、PWM及占空比限幅等模块的搭建,验证了在输入电压跌落(20V→10V)和负载突变(2A→4A)等场景下的稳定性能。仿真结果表明,输出电压波动小于0.35V,恢复时间快于1ms,电感电流有效限幅。文章还讨论了工程实践要点和扩展方

xiaoheshang_123的博客 318

python:排序算法——插入排序

python:排序算法——插入排序 目录:python:排序算法——插入排序1、什么是插入排序2、工作原理3、动态流程图4、源码5、总结(1)使用场景(2)特点 1、什么是插入排序 ​ 插入排序(英文名称:Insertion Sort)是一种简单且直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序数列中从后向前扫描,直到找到相应位置插入即可。 2、工作原理 ​ 如果你还是不明白什么是插入排序,那么我将用比百度中更直白的方式讲给大家听。 ​ 插入排序的核心所在:将一个无序的列表看

abraham_ly的博客 1105

【产品】 产品设计:ID设计和MD设计详解

1、ID(Industry Design)工业设计 包含外观、材质、手感、颜色配搭,主要界面的实现与及色彩等方面的设计。 2、MD(Mechanical Design)结构设计 以手机为例: 前壳、后壳、手机的摄像镜头位置的选择、固定的方式、电池如何连接和手机的厚薄程度等。 如果是滑盖手机,如何让手机滑上去,怎样实现自动往上弹,SIM卡怎样插和拔的安排,这些都是手机结构设计的范畴。 繁...

产品线负责人 3万+

STM32串口编程基础知识讲解

本篇文章给大家介绍一下串口的基础编程知识,这些知识是属于串口的理论知识,在开始学习编写代码的时候必须要掌握这些基本的知识点。本篇文章讲解了串口的基本概念知识,大家在学习编写代码时将其掌握才能更好的理解代码。

m0_49476241的博客 1208

【21天学习经典算法】折半查找与折半插入排序(附Python完整代码)

本文主要讲述了折半查找算法与折半插入排序算法的工作方式和伪代码,最后使用了Python语言实现了算法逻辑。

Albert_Lsk的博客 1683

YOLOv11改进策略【独家融合改进】| 模型轻量化二次改进:StarNet + FreqFusion,极限降参,适用专栏内所有轻量化模型

FreqFusion是一种旨在解决密集图像预测任务中特征融合问题。

Limiiiing的博客 2123

最新Python数据结构与算法教程

适用人群 Python初、中级学习者和开发者,对Python数据结构和算法感兴趣的学生和开发者。 课程概述 Python目前在人工智能,运维,后端开发,爬虫等领域使用越来越广泛,而数据结构和算法是计算机科学的基础知识。本课程使用Python语言系统讲解了常用数据结构和算法,帮助学习者提升开发技能。 课程特点: 1.每个算法和数据结构都有讲义、视频(包含讲解、图示、手动模拟)、源...

qq_46241791的博客 502

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Day6_Python数据结构与算法:排序之插入排序

插入排序 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 插入排序分析 动态分析图: 代码实现: #!usr/bin/env python # -*- coding:utf-8 _*- """ @author: Administrator @file: 13-3.py @time: 20

ANDROID6666666的博客 444

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python数据结构谁讲得好_非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程...

非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程1.JPG (42.29 KB, 下载次数: 0)2019-11-5 00:01 上传3.JPG (38.01 KB, 下载次数: 0)2019-11-5 00:01 上传2.JPG (44.02 KB, 下载次数: 0)2019-11-5 00:01 上传数据结构与算法相信大家都不陌生,但在以往有很多...

weixin_39851008的博客 138

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

数据结构与算法之排序算法

编程内功心法(Python描述) 排序算法(6个经典排序算法) 1. 快速排序(QuickSort) import random def quick_sort(list_, start, end): if start >= end: return low = start height = end mid = list_[l...

qq_42250782的博客 257

python数据结构与算法中文教程_《Python数据结构与算法教程》完整版_资源网站...

《网易云课堂《目录章节1: Python数据结构与算法章节2:抽象数据类型和面向对象编程课时3抽象数据类型和面向对象编程07:40章节3:数组和列表课时4python 数组和列表10:54章节4:链表课时5单链表110:38课时6单链表209:09课时7循环双端链表111:12课时8循环双端链表209:17章节5:队列课时9队列10:21课时10用数组实现队列09:09课时11双端队列03:19章...

weixin_39974409的博客 243

python数据结构和算法视频教程_基于Python的数据结构与算法视频教程,Python数据结构精讲教程下载...

课程名称非常难得Python好课-基于Python的数据结构与算法视频教程 Python数据结构精讲教程数据结构与算法相信大家都不陌生,但在以往有很多基于JAVA或C等语言的数据结构与算法课程却鲜有基于Python来讲解的数据结构与算法课程,这跟过去几年Python的火热却形成了鲜明的反差不过原因不是我们讨论的重点,技术和学习才是我们的最重要的任务,那么这套非常难得的Python数据结构与算法课程...

weixin_39683163的博客 273

数据结构经典排序算法——python(详细汇总)

python算法学习笔记前言一、冒泡排序1.1 算法步骤1.2 图解1.3 排序效率1.4 Python代码实现二、选择排序2.1 算法步骤2.2 图解2.3 Python代码实现三、插入排序3.1 算法步骤3.2 图解3.3 排序效率3.4 Python代码实现四、希尔排序4.1 算法步骤4.2 图解4.3 排序效率4.4 Python代码实现五、归并排序5.1 算法步骤5.2 图解5.3 Python代码实现六、快速排序6.1 算法步骤6.2 图解6.3 Python代码实现七、堆排序7.1 算法步骤7

perfect_code_hzy的博客 2148

算法导论的python实现之插入排序

在排序中,可能大家最先接触也最容易想到的应该是冒泡排序或者选择排序,然而在算法导论一书中却是从插入排序开始讨论,其实现思路类似于整理纸牌的过程。从一堆牌中选择第一张拿在手中,然后每拿一张牌均在手中找到这张牌应该放在的位置,这样当取完了全部的纸牌,手中的纸牌就是有序的了。 def insertion_sort(A): for j in range(1,len(A)): ke

我是一只熊猫 1196

视频教程-Python数据结构与算法视频教程-Python

Python数据结构与算法视频教程 知乎 Python 后端工程师。 htt...

weixin_30844801的博客 706

数据结构与算法(python)笔记整理

1.引入概念 1.1 第一次尝试 import time start_time=time.time() for a in range(0,1001): for b in range(0,1001): for c in range(0,1001): if a**2+b**2==c**2 and a+b+c==1000: print(...

qq_37356854的博客 481

Python[数据结构及算法 --- 查找]

这段代码实现了选择排序算法,其基本思想是:每次从未排序的部分中找到最大(这里是升序排序,找最大元素放到未排序部分末尾 )的元素,与未排序部分的最后一个元素交换位置,逐步完成列表的排序。)依次与前面已排序部分的元素进行比较,如果前面元素大于当前元素,就将前面元素后移,直到找到当前元素应该插入的位置,最后将当前元素插入到该位置,逐步构建有序列表。这段 Python 代码实现了插入排序算法,其工作原理是:从列表的第二个元素开始,将当前元素(

2402_88564782的博客 1069

【数据结构与算法——python】排序与查找

查找 顺序查找——O(n)O(n)O(n) 无序表查找 def sequentialSearch(alist, item): pos = 0 found = False while pos < len(alist) and not found: if alist[pos] == item: found = True ...

ZhShy 432

python数据结构与算法第88讲_网易云课堂-Python数据结构与算法,视频教程下载,价值88元

网易云课堂-Python数据结构与算法,视频教程下载,价值88元

weixin_39659837的博客 289
上一篇: python数据结构与算法 29-3 用哈希表实现映射
下一篇: python数据结构与算法 33 希尔排序
杀了这个男孩
博客等级 码龄18年 149粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值