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

运行结果:

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

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

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

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

最新文章

  1. IoC模式(依赖、依赖倒置、依赖注入、控制反转)
  2. js 通过身份证识别生日、年龄、性别
  3. [QualityCenter]设置工作流脚本-缺陷字段值发生变化时的处理
  4. Nagios Looking Glass 本地文件包含漏洞
  5. [Redux] Writing a Todo List Reducer (Adding a Todo)
  6. ios 开发 常见问题解决 (持续更新)
  7. NLP+VS︱深度学习数据集标注工具、方法摘录,欢迎补充~~
  8. Java常用的九种排序方法及代码实现
  9. Django Rest framework 之 版本
  10. tolua杂记
  11. ★itext-为pdf文件添加页眉页脚 | 3步完成 |
  12. django -- while time zone support is active
  13. Sql Server CPU 性能排查及优化的相关 Sql
  14. Zynq-7000 FreeRTOS(一)系统移植配置
  15. csu 1329 一行盒子(链表操作)
  16. s:if 标签用法总结和举例
  17. static变量、static方法之间的异同
  18. vue-router的一个小实例
  19. LeetCode OJ:Multiply Strings (字符串乘法)
  20. Spell checker - poj 1035 (hash)

热门文章

  1. DG duplicate报错:RMAN-05001:auxiliary file name /u01/app/oracle/oradata/fratbs01.dbf conflicts with a file used by the target database
  2. C#串口通信——DtrEnable 和RtsEnable 两个属性
  3. 『心善渊』Selenium3.0基础 — 12、Selenium操作鼠标和键盘事件
  4. Nacos配置中心交互模型是 push 还是 pull ?你应该这么回答
  5. layui checkbox 样式
  6. js 对json数据进行检索 插件 linq.js
  7. c++11 线程间同步---利用std::condition_variable实现
  8. Java:Java的重写与重载区分
  9. Springboot:@RequestMapping注解及属性详解
  10. Pytorch的模型加速方法:Dataparallel (DP) 和 DataparallelDistributedparallel (DDP)