# 先将未排序的元素放到九天之上,一个临时变量temp,上到九天之上去观察前面已经排好的序列,
# 然后从后向前对比,只要临时变量小于某个位置的值,就将其向前移动一位,就是给比它下标大
# 1的位置处赋值,它本身的值.这样它本身的位置空出来了.将九天之上的temp填入此处.直到
# 某个满足这样的条件才跳出循环,算一轮,1.遍历了前面所有的元素了,正常结束循环,算作一轮;2.遇到比temp小或等于的元素
# 此时,打断循环,算作一轮 def InsertSort(myList):
length = len(myList) for i in range(1, length):
temp = myList[i] for j in reversed(range(i)):
if myList[j] > temp:
myList[j + 1] = myList[j]
          myList[j] = temp
       else:
          break
if __name__ == '__main__':
myList = [12, 15, 9, 20, 6, 31, 24]
InsertSort(myList)
print(myList)

  

插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表。

比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下:

(带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素)

时间复杂度:O(n^2)

待排序:     [49,38,65,97,76,13,27,49]

第一次比较后:  [38,49,65,97,76,13,27,49]     第二个元素(38)与之前的元素进行比较,发现38较小,进行交换

第二次比较后:  [38,49,65,97,76,13,27,49]   第三个元素(65)大于前一个元素(49),所以不进行交换操作,直接到下一个元素比较

第三次比较后:  [38,49,65,97,76,13,27,49]   和第二次比较类似

第四次比较后:  [38,49,65,76,97,13,27,49]   当前元素(76)比前一元素(97)小,(97)后移,(76)继续与(65)比较,发现当前元素比较大,执行插入

第五次比较后:  [13,38,49,65,76,97,27,49]  

第六次比较后:  [13,27,38,49,65,76,97,49]

第七次比较后:  [13,27,38,49,49,65,76,97]

从百度百科上盗了一张图:

python 直接插入排序的更多相关文章

  1. 史上最详细的C语言和Python的插入排序算法

    史上最详细的C语言和Python的插入排序算法插入排序原理:所谓插入排序,就像我们在打牌(斗地主)时,整理我们自己手中自己的牌一样,就像是2,1,3,9,J,K,5,4,这四张牌.我们要把它其中的几张 ...

  2. Python排序 插入排序

    插入排序从前往后遍历数组的每一个元素,对每一位元素都将其插入到已经有序的部分数组中,所以插入排序的要点就是找出要插入元素在已经有序的部分中的位置,同时,由于插入排序采用原地排序(in-place)算法 ...

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

    插入排序的花费时间 c*n2, c 是常数 伪代码 INSERTION-SORT(A) for i  to A.length key = A[j] //Insert A[j] into the sor ...

  4. python之插入排序

    插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部 ...

  5. python 实现插入排序、冒泡排序、归并排序

    def InsertSort(A): '''插入排序算法:传入一个list,对list中的数字进行排序''' print('插入排序前list元素顺序:',A) length=len(A) for i ...

  6. python算法-插入排序

    插入排序 一.核心思想:在一个有序的数组中,通过逐一和前面的数进行比较,找到新数的位置. 例子:数组有有一个数21 插入一个3,3<21,因此结果为 3,21 再插入一个34,34>21, ...

  7. python——直接插入排序

    直接插入排序 直接插入排序原理 直接插入排序过程 代码 时间复杂度分析 排序稳定性

  8. python 排序 插入排序与希尔排序

    希尔排序是插入排序的升级版,先来了解插入排序 插入排序 算法思想: 插入排序再面对几乎已经有序的数据效率非常高,可以达到线性排序的效率 将数组元素插入已经有序的部分中,具体的过程是在有序的部分中通过比 ...

  9. python实现插入排序

    代码如下@.·.@ # *-* coding: utf- *-* if __name__ == '__main__': def insert_sort(l): ,len(l)): tmp = l[i] ...

随机推荐

  1. 用 Java 实现常见的 8 种内部排序算法

    一.插入类排序 插入类排序就是在一个有序的序列中,插入一个新的关键字.从而达到新的有序序列.插入排序一般有直接插入排序.折半插入排序和希尔排序. 1. 插入排序 1.1 直接插入排序 /** * 直接 ...

  2. 如何将fidd上抓的包移到jmete中

    1.fiddler的安装配置就不说了, 网上有很多资源, 不会太难 2.使用fiddler抓包, 相信进来看这篇文章的博友都已经会使用fiddler抓包 3.打开jmeter, 添加>测试计划& ...

  3. Git的使用以及整理

    Usage of Git 1 Git区域划分 1)工作区(working directory):默认为项目根目录root 2)缓存区(stage):在版本库中设立一个缓存/暂存区,直接和工作区的文件进 ...

  4. python数据统计之禅道bug统计

    背景 通过定期输出 每条产品的 BUG 情况,以此来反馈开发解决问题.测试跟进问题的情况:钉钉群推送提醒开发及时解决 以此我这边开始着手准备编写一个小工具,最终达到目的:自动定期发送统计报告,报告维度 ...

  5. Git(12)-- Git 分支 - 分支简介

    @ 目录 1.分支简介 1.1.初始化并首次提交 首次提交对象及其树结构: git 的 cat-file 的命令用法: 1.2.修改并第二次提交 第二次提交对象及其树结构: 1.3.修改并第三次提交 ...

  6. NOIP 模拟 $11\; \rm english$

    题解 本题有一定代码难度 对于需要区间最大值,可以反过来考虑,先预处理出每个数所能扩展的最大边界,也就是说,求出一个最大的区间,其最大值为这个数,单调栈 \(\mathcal O(n)\) 求解 那么 ...

  7. open62541(opcua)传输延迟探索小记

    缘起 将open62541作为中间件使用代替自定义数据的RPC,client通过订阅valueChange来接收数据.使用时发现有一些问题: 前后两次产生的数据相同时,不会触发valueChange ...

  8. ASP.Net Core Web Api 使用 IdentityServer4 最新版 踩坑记录

    辅助工具 日志追踪包 : Serilog.AspNetCore 源码查看工具 : ILSpy 项目环境 ###: ASP.NetCore 3.1 IdentityServer4 4.0.0+ 主题内容 ...

  9. 定时执行的任务Quartz.net

  10. C#---OleDbHelper

    /// <summary> /// OleDbServer数据访问帮助类 /// </summary> public sealed class OleDbHelper { pu ...