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

  • 适用场景:一个新元素需要插入到一组已经是有序的数组中,或者是一组基本有序的数组排序。
  • 比较性:排序时元素之间需要比较,所以为比较排序。
  • 稳定性:从代码我们可以看出只有比较元素大于当前元素,比较元素才会往后移动,所以相同元素是不会改变相对顺序。
  • 时间复杂度:插入排序同样需要两次循坏一个一个比较,故时间复杂度也为O(n2)O(n^2)O(n2)。
  • 空间复杂度:只需要常数个辅助单元,所以空间复杂度也为O(1)O(1)O(1)。

案例

  • 给定一个列表:[8,5,1,1,8,5,7,4,6,3][8, 5, 1, 1, 8, 5, 7, 4, 6, 3][8,5,1,1,8,5,7,4,6,3]
  • 排序结果:[1,1,3,4,5,5,6,7,8,8][1, 1, 3, 4, 5, 5, 6, 7, 8, 8][1,1,3,4,5,5,6,7,8,8]
def insert_sort(tg_list):''' 排序算法:插入排序 '''for i in range(1,len(tg_list)):for j in range(i,0,-1):if tg_list[j] < tg_list[j-1]:tg_list[j-1], tg_list[j] = tg_list[j], tg_list[j-1]else:break
list_ = [8, 5, 1, 1, 8, 5, 7, 4, 6, 3]
insert_sort(list_)
  • 排序过程:

    ..................................................................................................................................................................
  • 对超长序列计算排序耗时时间。
  • 观察序列数量设置从100至10000,查看排序耗时走势。
  • 代码
import pandas as pd
import random
import timeimport seaborn as sns
import matplotlib.pyplot as plt# 解决win 系统中文不显示问题
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']def insert_sort(tg_list):''' 排序算法:插入排序 '''for i in range(1,len(tg_list)):for j in range(i,0,-1):if tg_list[j] < tg_list[j-1]:tg_list[j-1], tg_list[j] = tg_list[j], tg_list[j-1]else:breakdef get_runtime(n):''' 获取排序耗时 '''time_start = time.clock()  # 记录开始时间list_ = [random.randint(1,n) for i in range(n)]insert_sort(list_)time_end = time.clock()  # 记录结束时间time_sum = time_end - time_start  # 计算的时间差为程序的执行时间,单位为秒/sreturn [n,time_sum]def plot(df):''' 绘制折线图 '''pd.options.display.notebook_repr_html=False  # 表格显示plt.rcParams['figure.dpi'] = 75  # 图形分辨率sns.set_style(style='darkgrid')  # 图形主题plt.figure(figsize=(4,3),dpi=150)sns.lineplot(data=df,x='数量',y='耗时(s)')if __name__ == "__main__":nums = range(100,10000,100)res = list(map(get_runtime,nums))res_df = pd.DataFrame(res,columns=['数量','耗时(s)'])plot(res_df)

python 排序算法:插入排序相关推荐

  1. python排序算法——插入排序

    python排序算法--插入排序 文章目录 python排序算法--插入排序 一.前言 二.描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法是指 ...

  2. python排序算法-插入排序

    直接插入排序核心思想:将需要排序的序列分为两个部分,前面部分是排序好的,后面部分是未排序的,每轮从未排序的部分钟取出一个数,然后通过比较大小把他插入到指定位置,每插入一个数后,排序好的部分则增加一个数 ...

  3. Python排序算法总结

    Python排序算法总结 递归 在正式讲算法之前,先介绍一下递归.递归是一种解决问题的思路. 特点 调用自身 必须有一个明确的结束条件,比如if... 递归的两个阶段: 递推(压栈):到某个阶段,该阶 ...

  4. 带你掌握4种Python 排序算法

    摘要:在编程里,排序是一个重要算法,它可以帮助我们更快.更容易地定位数据.在这篇文章中,我们将使用排序算法分类器对我们的数组进行排序,了解它们是如何工作的. 本文分享自华为云社区<Python ...

  5. Python排序算法[二]:测试数据的迷雾散去

    算法试验中不仅仅要尝试使用不同的写法,更要注意测试所用数据的规律性,它们都会直接影响测试结果. 在上一篇文章<Python 排序算法[一]:令你茅塞顿开,却又匪夷所思>中我们学习了排序算法 ...

  6. python排序算法——归并排序(附代码)

    python排序算法 --归并排序 文章目录 python排序算法 --归并排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  7. python排序算法 ——冒泡排序(附代码)

    python排序算法 --冒泡排序 文章目录 python排序算法 --冒泡排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序 ...

  8. python排序算法——希尔排序(附代码)

    python排序算法--希尔排序 文章目录 python排序算法--希尔排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法 ...

  9. 算法学习--排序算法--插入排序

    算法学习--排序算法--插入排序 插入排序算法 代码实现 插入排序算法 插入排序(Insertion sort)是一种简单直观且稳定的排序算法.如果有一个已经有序的数据序列,要求在这个已经排好的数据序 ...

最新文章

  1. JavaScript绑定事件的方法[3种]
  2. リアルタイム3Dニャンニャン 汉化补丁
  3. [css] 给一个图片设置透明有哪些方式呢?
  4. pmw调光c语言程序,51单片机led灯渐变PWM调光(渐亮渐灭)C语言和汇编源程序
  5. 原生开发安卓/iOS,Visual Studio迎神器扩展
  6. mysql引号注入_MySql注入
  7. html中iframe子页面与父页面元素的访问以及js变量的访问
  8. 如何录制回放测试用例并且添加检查点?
  9. x264源代码简单分析:x264命令行工具(x264.exe)
  10. 对无焦点窗口模拟按键_键盘不为人知的一面——单按键篇
  11. 海康威视DS-7808HW-SNH固件升级包支持萤石云
  12. 打狗棒法之:Cknife(C刀)自定义模式秒过安全狗(二)
  13. 二进制码和格雷码转换问题
  14. 内存溢出(OOM)及解决方案
  15. 有些公司的年会,还不如《天龙八部》的万仙大会
  16. 微博视频怎么下载?微博视频下载和保存工具
  17. 51nod 1548 欧姆诺姆和糖果【思维+分类讨论】
  18. 《2023新一代数字办公白皮书》正式发布!| 爱分析报告
  19. 华硕Z91515C笔记本使用随记
  20. python两个数组合并排序_合并Python中的排序数组

热门文章

  1. 华为助力 2020 中国开源年会 暨 阿帕奇中国路演
  2. 最新 Arduino 驱动 12接口/户外 LED显示屏/LED点阵屏/LED单元板
  3. QQ空间常遇到的三个问题及解决办法
  4. jzoj 6271. 2019.8.4【NOIP提高组A】锻造 (forging)
  5. HS6621CG低功耗调试开发资料
  6. 品牌影响力评估方法探讨
  7. We found that your app is an in-house application
  8. 01.Bootstrap入门、CSS样式【栅格系统】
  9. iOS的layer的anchorpoint与posion问题
  10. 【翻译】如何独立思考——Paul Graham