什么是插入排序

插入排序(英语: Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

算法步骤:
① 将第一排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
② 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)


插入排序的演示


时间复杂度

  • 最优时间复杂度:O(n)(升序排列,序列已经处于升序状态)
  • 最坏时间复杂度:O(n^2)
  • 稳定性:稳定

代码实现

def insert_sort(alist):'''插入排序'''n = len(alist)# 从右边的无序序列中取出多少个元素执行这样的过程for j in range(1,n):# i 代表内层循环的起始值i = jwhile i>0:if alist[i] < alist[i-1]:alist[i],alist[i-1] = alist[i-1],alist[i]i -= 1else:breakif __name__ == '__main__':li = [54,26,93,17,77,31,44,55,20]print(li)insert_sort(li)print(li)

结果:

[54, 26, 93, 17, 77, 31, 44, 55, 20]
[17, 20, 26, 31, 44, 54, 55, 77, 93]

数据结构与算法笔记(八)—— 插入排序相关推荐

  1. 【数据结构和算法笔记】插入排序(直接插入排序,折半插入排序)

    插入排序的基本思路 直接插入排序 代码: void InsertSort(vector<int>&a) {int n=a.size();if(n==1)return;for(int ...

  2. 软考-嵌入式系统设计师:程序设计、数据结构和算法:笔记(八)]

    大家不要只收藏不关注呀,哪怕只是点个赞也可以呀!

  3. 数据结构与算法笔记(青岛大学王卓老师视频)

    写在前面的话: 因为在学习数据结构之前,学习过一年的算法,所以有一些基础,一些我觉得 没必要的代码或知识就没写上,记得多是一些知识点,写的可能对于别人来说 很难接受,望谅解.我学习算法是在Acwing ...

  4. JS数据结构与算法 笔记

    JS数据结构与算法笔记 前言:不定时更新说明 1. 栈(Stack) 1.1 基于数组实现栈 1.2 基于对象实现栈 1.3 基于链表实现栈 1.4 栈的简单应用 1.4.1 字符串中的括号匹配问题 ...

  5. 数据结构与算法笔记 - 绪论

    数据结构与算法笔记 - 绪论 1. 什么是计算 2. 评判DSA优劣的参照(直尺) 3. 度量DSA性能的尺度(刻度) 4. DSA的性能度量的方法 5. DSA性能的设计及其优化 x1. 理论模型与 ...

  6. 数据结构与算法笔记(十六)—— 二叉搜索树

    一.二叉搜索树定义 二叉搜索树(Binary Search Tree),又名二叉排序树(Binary Sort Tree). 二叉搜索树是具有有以下性质的二叉树: 若左子树不为空,则左子树上所有节点的 ...

  7. 数据结构与算法笔记(十五)—— 散列(哈希表)

    一.前沿 1.1.直接寻址表 当关键字的全域U比较小时,直接寻址是一种简单而有效的技术.假设某应用要用到一个动态集合,其中每个元素都有一个取自全域U={0,1,-,m-1)的关键字,此处m是一个不很大 ...

  8. 08_JavaScript数据结构与算法(八)集合

    JavaScript 数据结构与算法(八)集合 集合 几乎每种编程语言中,都有集合结构.集合比较常见的实现方式是哈希表,这里使用 JavaScript 的 Object 进行封装. 集合特点 集合通常 ...

  9. 数据结构与算法笔记(王卓网课+教材+大话数据结构)

    数据结构与算法笔记(王卓网课+教材+大话数据结构) ##最新整理!!! 顺序存储结构的线性表P10-P21 顺序线性表的代码实现 链式线性表笔记 串笔记 绪论.算法(P1-P9)1.4数据起源结构 数 ...

  10. 明翰数据结构与算法笔记V0.8(持续更新)

    文章目录 前言 数据结构 `线性表` `数组` `链表` `栈与队列` [串/字符串] 树 并查集 `二叉树` [二叉排序树/二叉搜索树] `红黑树` 红黑树操作 霍夫曼树 `堆` [大/小]根堆 可 ...

最新文章

  1. 【目标检测基础积累】常用的评价指标
  2. 英飞凌AI电磁越野组浅析
  3. Balder 3D开发系列之--创建天空盒
  4. ide 波浪线_零基础学习Python_小波浪
  5. 关于网上cython书籍的调研
  6. oracle-11g-R2监听文件配置
  7. 透析《长安十二时辰》里的望楼,人类在唐朝就有 5G 愿望了?
  8. web端权限维持【好文】
  9. C++---基于ffmpeg实现视频播放器(一)
  10. QQ资料清空php源码,[php源码][QQ玫瑰小镇]一键收铲种,php网页版
  11. Opencv官方文档和学习资料
  12. 平面方程、夹角与点到平面的距离
  13. cass软件注记的字体类型和字体大小的问题
  14. 顽固文件文件夹删除工具
  15. python 拟合圆_OpenCV曲线拟合与圆拟合
  16. 使用Windows Live Writer WLW向Joomla网站发帖
  17. java gc 监控_JAVA网站full GC监控脚本
  18. 网页占满整个屏幕_css设置网页占满屏幕
  19. 云原生中为什么需要API网关?
  20. stm32模数转换程序设计c语言,STM32 ADC模数转换简介

热门文章

  1. java (三)面向对象编程
  2. 深度学习基础知识(一): 概述-神经网络起源和发展
  3. Linux疑难杂症解决方案100篇(三)-嵌套循环及随机数知多少
  4. 用Tableau制作滚动时间轴(上)
  5. 训练网络loss出现Nan的原因总结记录
  6. Python编程基础:第十三节 循环控制语句Loop Control Statements
  7. 一个可供参考的Java高并发异步应用案例--转
  8. How those spring enable annotations work--转
  9. 25个Java机器学习工具库--转载
  10. java.sql.SQLException: Lock wait timeout exceeded --转