# 插入排序
# 作用:对给出的n个顺序不定的数进行排序
# 输入:任意数组A
# 输出:按顺序排列的数组A
# 时间复杂度 n(n-1) 至 (n(n-1))/2
 
# 插入排序过程
# 第一趟:选择第一个元素,之前没有其他元素可以比较,故放在第一位
# 第二趟:选择第二个元素,与前一个元素比较,若比之大,则不动;若比之小,则与之交换
# 第三趟:选择第三个元素,与前一个元素比较,若比之大,则不动;若比之小,则与之交换
#        直到该元素前面没有再比它小的数
# 每次循环确定一个数的相对位置,以此类推
  1. 1 # 在此修改初始数据
  2. 2 A = [12,56,92,-1,5,110,92,999,-39,21,76,33,56]
  3. 3
  4. 4 print('您的初始数据为:')
  5. 5 print(A);print('\n'*1)
  6. 6 n = len(A) # 用n获取数组长度
  7. 7 i = 0 # 外循环时数组的下标
  8. 8 j = 0 # 内循环时数组的下标
  9. 9
  10. 10 while i <= n-1:
  11. 11 x = A[i]
  12. 12 j = i - 1
  13. 13 while j > -1 and A[j] > x:
  14. 14 A[j+1] = A[j]
  15. 15 j = j - 1
  16. 16 A[j+1] = x
  17. 17 i = i + 1
  18. 18 print(A)
  19. 19
  20. 20 print('调整后的数据为:')
  21. 21 print(A)

运行结果:

  1. 您的初始数据为:
  2. [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
  3. 调整后的数据为:
  4. [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]

插入排序运行过程中数组A的变化情况:

  1. 1 [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
  2. 2 [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
  3. 3 [12, 56, 92, -1, 5, 110, 92, 999, -39, 21, 76, 33, 56]
  4. 4 [-1, 12, 56, 92, 5, 110, 92, 999, -39, 21, 76, 33, 56]
  5. 5 [-1, 5, 12, 56, 92, 110, 92, 999, -39, 21, 76, 33, 56]
  6. 6 [-1, 5, 12, 56, 92, 110, 92, 999, -39, 21, 76, 33, 56]
  7. 7 [-1, 5, 12, 56, 92, 92, 110, 999, -39, 21, 76, 33, 56]
  8. 8 [-1, 5, 12, 56, 92, 92, 110, 999, -39, 21, 76, 33, 56]
  9. 9 [-39, -1, 5, 12, 56, 92, 92, 110, 999, 21, 76, 33, 56]
  10. 10 [-39, -1, 5, 12, 21, 56, 92, 92, 110, 999, 76, 33, 56]
  11. 11 [-39, -1, 5, 12, 21, 56, 76, 92, 92, 110, 999, 33, 56]
  12. 12 [-39, -1, 5, 12, 21, 33, 56, 76, 92, 92, 110, 999, 56]
  13. 13 [-39, -1, 5, 12, 21, 33, 56, 56, 76, 92, 92, 110, 999]

简而言之,插入排序算法类似于打牌时的排序,从左到右按顺序选牌,然后插入到合适的位置。

插入排序(insertion_sort)——Python实现的更多相关文章

  1. 【算法】插入排序 insertion_sort

    准备写个<STL 源代码剖析>的读书笔记,开个专栏.名为<STL 的实现>,将源代码整理一遍.非常喜欢侯捷先生写在封底的八个字:天下大事.必作于细.他在书中写到:"我 ...

  2. 排序算法之插入排序的python实现

    插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列: (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: (3)如果该元素(有序序列)大于待 ...

  3. 插入排序(insertion_sort)

    最简单的排序算法,又称插值排序,原理类似于打扑克牌时把摸到的牌插入手中已有序牌的过程. void insertion_sort(int* A ,int n){ int i,j,key; ;i < ...

  4. 插入排序之python实现源码

    def insert_sort(old): for i in range(1, len(old)): for j in range(i, 0, -1): if(old[j] < old[j-1] ...

  5. 插入排序(Python实现)

    目录 1. for版本--插入排序 2. while版本--插入排序 3. 测试用例 4. 算法时间复杂度分析 1. for版本--插入排序 def insert_sort_for(a_list): ...

  6. 插入排序之python

    插入排序( Insert sort) 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入: 由于不需要全部都比较完,所以排序速度优于冒泡和选择排序. #插入排序就像是斗地 ...

  7. 排序-----插入排序(python版)

    直接插入排序的算法思路: (1) 设置监视哨r[0],将待插入纪录的值赋值给r[0]: (2) 设置开始查找的位置j: (3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j] ...

  8. 直接插入排序(python实现)

    这篇博文用来介绍直接插入排序 直接插入排序基本思想: 每次将一个待排序的记录插入到已经排好序的数据区中,直到全部插入完为止 直接插入排序算法思路: 在直接插入排序中,数据元素分为了有序区和无序区两个部 ...

  9. 插入排序算法-python实现

    #-*- coding: UTF-8 -*- import numpy as np def InsertSort(a): for i in xrange(1,a.size): for j in xra ...

  10. 插入排序的Python代码实现

    是打扑克的时候了 那种按大小排序的扑克游戏 def insert_sort(arr): for i in range(1,len(arr)): for j in range(i,0,-1): #与左边 ...

随机推荐

  1. Java课程设计-算术运算测试(D级) 齐鲁工业大学 计科20-1 王瀚垠 202003010033

    Java课程设计-算术运算测试(D级) 齐鲁工业大学 计科20-1 王瀚垠 202003010033 目录 1.项目简介 2.项目采用技术 3.功能需求分析 4.项目亮点 5.项目功能架构图和UML类 ...

  2. 【题解】Luogu p2016 战略游戏 (最小点覆盖)

    题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得这些士兵能 ...

  3. React-Antd4的Form表单校验

    之前很少用react做项目,最近入职新公司,用的react,在自己的摸索过程中,慢慢会记录一些使用方法.今天简单记录一下使用antd 4.0版本的Form表单校验,直接代码. 需要购买阿里云产品和服务 ...

  4. react 工程目录简介

    创建一个 todolist 项目,下图是其工程目录. node_modules文件夹 里面存放的是我们所建项目放所依赖的第三方的包 public文件夹 favicon.ico 图标文件,网页标题左上角 ...

  5. .NET Core如何全局获取用户信息?

    前言 在增删改查中的增和改操作中,我们经常需要更新数据流的创建人和修改人,无论我们项目是基于DDD,抑或是简单仅有服务层,此时我们都需要获取用户信息,那么我们只能将用户标识从控制器层层传递到服务或仓储 ...

  6. layui 列合并相同内容

    table.render({ elem: '#tbdata', method: 'post', data: jsonData, height: temphei, limit: 20, limits: ...

  7. SDLC开发安全流程

    2020年12月9日跟内部小伙伴分享SDLC流程及安全的一些思考,简单画了一个图,时间过得太快,记录一下 参考 https://blog.csdn.net/liqiuman180688/article ...

  8. 利用ONT测序检测真核生物全基因组甲基化状态

    摘要 甲基化在真核生物基因组序列中广泛存在,其中5mC最为普遍,在真核生物基因组中也有发现6mA.捕获基因组中的甲基化状态的常用技术是全基因组甲基化测序(WGBS)和简化甲基化测序(RRBS),而随着 ...

  9. Vue 两个字段联合校验典型例子--修改密码

    1.前言   本文是前文<Vue Element-ui表单校验规则,你掌握了哪些?>针对多字段联合校验的典型应用.   在修改密码时,一般需要确认两次密码一致,涉及2个属性字段.类似的涉及 ...

  10. AcWing 1290. 越狱

    监狱有连续编号为1~n的n个房间,每个房间关押一个犯人.有 M种宗教,每个犯人可能信仰其中一种.如果相邻房间的犯人信仰的宗教相同,就可能发生越狱.求有多少种状态可能发生越狱. #include< ...