热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

插入排序_动画|什么是插入排序?

篇首语:本文由编程笔记#小编为大家整理,主要介绍了动画 | 什么是插入排序?相关的知识,希望对你有一定的参考价值。 插入排序插入排序是比较简单也比较直接的一种排序算法。它是从一堆数据中取出一个数据并将

篇首语:本文由编程笔记#小编为大家整理,主要介绍了动画 | 什么是插入排序?相关的知识,希望对你有一定的参考价值。



插入排序

技术图片

插入排序是比较简单也比较直接的一种排序算法。它是从一堆数据中取出一个数据并将它插入到已排序的数据中合适的位置。

比如按身高排队,有一个人指挥排队从第二个人开始,按身高把当前的人安插到之前排序好队的合适的位置。

或者打扑克牌,假设我们拿到了10,J,K,A这四张牌,然后拿到了Q这张牌,那如何让手中的五张牌变为升序呢?如果我们只学了冒泡排序和快速排序,初始状态是10,J,K,A,Q。

如果是用冒泡排序或者快速排序去做的话,那就可能不合适。结果是对,但是浪费了很多比较次数。

正常人最简单的方式就是,把Q安插到J和K之间就可以了。

技术图片

插入排序正是如此,它的思想就是维护一个有序区,把元素一个一个插入到有序区中的合适的位置,直到所有元素有序为止。


视频动画





Code

技术图片


Result

初始状态 [5, 1, 3, 7, 4, 6, 2]

发生交换 [1, 5, 3, 7, 4, 6, 2]

1趟 [1, 5, 3, 7, 4, 6, 2]

发生交换 [1, 3, 5, 7, 4, 6, 2]

2趟 [1, 3, 5, 7, 4, 6, 2]

3趟 [1, 3, 5, 7, 4, 6, 2]

发生交换 [1, 3, 5, 4, 7, 6, 2]

发生交换 [1, 3, 4, 5, 7, 6, 2]

4趟 [1, 3, 4, 5, 7, 6, 2]

发生交换 [1, 3, 4, 5, 6, 7, 2]

5趟 [1, 3, 4, 5, 6, 7, 2]

发生交换 [1, 3, 4, 5, 6, 2, 7]

发生交换 [1, 3, 4, 5, 2, 6, 7]

发生交换 [1, 3, 4, 2, 5, 6, 7]

发生交换 [1, 3, 2, 4, 5, 6, 7]

发生交换 [1, 2, 3, 4, 5, 6, 7]

6趟 [1, 2, 3, 4, 5, 6, 7]


插入排序优化,减少不必要的交换次数

回顾一下上面代码运行的结果,发现有很多次的交换,会有一点一点的时间上的消耗。如果我们做减少交换次数的代码,那如何去写呢?

回顾一下快速排序那篇文章,也使用了减少交换次数的方法。它是一个一个待比较完之后,定位最大的元素或者最小的元素,然后进行交换。

插入排序把待插入的元素做一个标记,和有序区一个一个元素去做比较。假设是从待插入元素的邻近元素开始比较(从后往前),符合条件的前一个元素去复制粘贴到待插入元素的地址。直到不符合条件才插入到合适的位置。


视频动画





Code

技术图片


Result

初始状态 [5, 1, 3, 7, 4, 6, 2]

发生复制 [5, 5, 3, 7, 4, 6, 2]

1趟 [1, 5, 3, 7, 4, 6, 2]

发生复制 [1, 5, 5, 7, 4, 6, 2]

2趟 [1, 3, 5, 7, 4, 6, 2]

3趟 [1, 3, 5, 7, 4, 6, 2]

发生复制 [1, 3, 5, 7, 7, 6, 2]

发生复制 [1, 3, 5, 5, 7, 6, 2]

4趟 [1, 3, 4, 5, 7, 6, 2]

发生复制 [1, 3, 4, 5, 7, 7, 2]

5趟 [1, 3, 4, 5, 6, 7, 2]

发生复制 [1, 3, 4, 5, 6, 7, 7]

发生复制 [1, 3, 4, 5, 6, 6, 7]

发生复制 [1, 3, 4, 5, 5, 6, 7]

发生复制 [1, 3, 4, 4, 5, 6, 7]

发生复制 [1, 3, 3, 4, 5, 6, 7]

6趟 [1, 2, 3, 4, 5, 6, 7]


推荐阅读
  • 深入解析Redis内存对象模型
    本文详细介绍了Redis内存对象模型的关键知识点,包括内存统计、内存分配、数据存储细节及优化策略。通过实际案例和专业分析,帮助读者全面理解Redis内存管理机制。 ... [详细]
  • 基于结构相似性的HOPC算法:多模态遥感影像配准方法及Matlab实现
    本文介绍了一种基于结构相似性的多模态遥感影像配准方法——HOPC算法,该算法通过相位一致性模型构建几何结构特征描述符,能够有效应对多模态影像间的非线性辐射差异。文章详细阐述了HOPC算法的原理、实验结果及其在多种遥感影像中的应用,并提供了相应的Matlab代码。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 本文探讨了如何使用自增和自减运算符遍历二维数组中的元素。通过实例详细解释了指针与二维数组结合使用的正确方法,并解答了常见的错误用法。 ... [详细]
  • 给定行数 numRows,生成帕斯卡三角形的前 numRows 行。例如,当 numRows 为 5 时,返回的结果应为:[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]。 ... [详细]
  • 本文介绍了如何利用Python编程语言实现类似Photoshop的图像对比度调整功能。通过详细的算法解析和代码示例,帮助读者理解和应用这一技术。 ... [详细]
  • 方法:1 配置数据库basediros.path.abspath(os.path.dirname(__file__))  #获取当前文件的绝对路径appFlask(__name__ ... [详细]
  • 利用决策树预测NBA比赛胜负的Python数据挖掘实践
    本文通过使用2013-14赛季NBA赛程与结果数据集以及2013年NBA排名数据,结合《Python数据挖掘入门与实践》一书中的方法,展示如何应用决策树算法进行比赛胜负预测。我们将详细讲解数据预处理、特征工程及模型评估等关键步骤。 ... [详细]
  • 本文详细探讨了对回溯算法的理解,分析了其在解决“子集和”问题中的应用,并分享了学习过程中遇到的挑战及合作编程的经验。文章通过具体实例和代码片段,深入解析了回溯法的核心思想及其优化策略。 ... [详细]
  • 本文详细解析了Java中hashCode()和equals()方法的实现原理及其在哈希表结构中的应用,探讨了两者之间的关系及其实现时需要注意的问题。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • 本教程详细介绍了如何使用 TensorFlow 2.0 构建和训练多层感知机(MLP)网络,涵盖回归和分类任务。通过具体示例和代码实现,帮助初学者快速掌握 TensorFlow 的核心概念和操作。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 本文介绍了数据库体系的基础知识,涵盖关系型数据库(如MySQL)和非关系型数据库(如MongoDB)的基本操作及高级功能。通过三个阶段的学习路径——基础、优化和部署,帮助读者全面掌握数据库的使用和管理。 ... [详细]
author-avatar
靜trevis_263
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有