美文网首页
算法和数据结构2.3插入排序

算法和数据结构2.3插入排序

作者: 数字d | 来源:发表于2019-07-27 19:25 被阅读0次

插入排序

插入排序是一种序列从左端开始一次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。
插入排序的思路就是从右侧未排序的区域内去策划一个数据,然后将它插入到已排序的区域内的合适位置上。

排序步骤

假设有9个数字:

5 3 4 7 2 8 6 9 1

首先假设最左边的数字5已经完成了排序,所以此时只有5是已经排好序的数字。

接下来从待排序的数字区域内取出最左边的数字3,将它和左边已经归为的数字5进行比较。

若左边的数字更大,就交换这两个数字的位置。重复该操作,直到左边的已经归为的数字比取出的数字要小,或者取出的数字已经被移到整个序列的最左边为止。

因为5 > 3 所以

3 5 4 7 2 8 6 9 1

对数字3的排序工作到此结束。

此时3 和 5都已经归为了

还剩下右侧7个数字没有排序

接下来是地三轮。和前面的一样,取出未怕爱徐区域中最坐标安的数字4,将它与左边的数字5进行比较。

这里由于 5 > 4,所以交换这两个数字。

注意:这里交换后,再把4和左边的3比较,因为3 < 4,出现了比4小的数字,操作结束。

3 4 5 7 2 8 6 9 1

于是4也归位了。此时3,4,5都归为了已经排序的区域也得到了扩大。

接下来操作7,
将7和5进行比较,发现5 < 7 ,那么操作结束,不需要进行任何操作即可完成排序。

排序中....

重复以上操作,直到所有数字都归为。

对所有数字归为以后,排序就完成了。

时间计算:

在插入排序中,需要将取出的数据与其左边的数字进行比较。如果左边的数字更小,就不需要继续比较,本轮操作结束,自然也不需要交换位置的操作。

如果取出的数字比左边已归位的数字都要小,就必须不停地比较大小,交换数字,直到它整个序列的最左边为止。

具体来说就是:第k轮需要比价k-1次。因此,在最糟糕的情况下,第2轮的操作需要一次,第k轮的操作需要k-1次,所以时间复杂度和冒泡排序一样的都是O(n2)。

相关文章

  • 算法和数据结构2.3插入排序

    插入排序 插入排序是一种序列从左端开始一次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是...

  • Java数据结构和算法(九)——高级排序

    在Java数据结构和算法(三)——冒泡、选择、插入排序算法中我们介绍了三种简单的排序算法,它们的时间复杂度大O表示...

  • 算法-插入排序

    算 法:插入排序算法时间复杂度: 插入排序算法描述 插入排序伪代码 插入排序实现 插入排序算法概述 插入排...

  • Python 算法大全

    这个库涵盖了多种算法和数据结构的介绍,比如: 排序算法(冒泡排序、希尔排序、插入排序、桶排序、合并排序、快速排序、...

  • 数据结构与算法-目录

    数据结构与算法-目录 C语言篇 数据结构和算法-C语言篇1-绪论数据结构和算法-C语言篇2-初识算法数据结构与算法...

  • 技术类面试要点梳理

    未完待续== 一、数据结构与算法 1. 排序 插入排序N-1趟排序组成。从P=1到P=N-1趟,插入排序保证从位置...

  • 数据结构与算法

    参考链接:算法 数据结构与算法 iOS数据结构 和 算法 上 算法 1、数据结构: 集合结构: 线性结构: 树形结...

  • 技术图文:如何利用C# 实现 Kruskal 最小生成树算法?

    背景 以前我写过一些图文来介绍有关数据结构与算法的知识: 8大排序算法之:直接插入排序(Straight Inse...

  • python 冒泡排序和选择排序算法

    插入排序算法 冒泡排序算法

  • 数据结构和算法之插入排序

    插入排序概念: 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据...

网友评论

      本文标题:算法和数据结构2.3插入排序

      本文链接:https://www.haomeiwen.com/subject/zazerctx.html