java数据结构与算法之插入排序详解

Java数据结构与算法之插入排序详解

什么是插入排序?

插入排序是一种简单且常用的排序算法,其基本思想是将未排序的元素一个一个地插入到已经排序好的有序序列中。

插入排序的步骤

  1. 首先确定一个将要被排序的数组;
  2. 从第二个元素开始,将其与排序好的子数组从后往前依次进行比较;
  3. 如果发现当前元素比排序好的子数组中的某个元素小,则将该元素插入到该元素的后面;
  4. 重复步骤2-3,直到所有元素都插入到有序序列中。

插入排序的示例

示例1

假设我们要将一个未排序的数字序列按照从小到大的顺序进行排序:

4, 1, 9, 3, 7, 6

首先,我们将第一个数字4看作一个有序子数组,然后从第二个数字1开始,依次将其插入到有序子数组中。第一次插入操作后,数组变成了:

1, 4, 9, 3, 7, 6

此时,有序子数组中有两个元素1和4。接下来,我们将第三个数字9插入到有序子数组中。由于9比4大,所以9不用做任何操作,数组保持不变:

1, 4, 9, 3, 7, 6

接下来,我们将第四个数字3插入到有序子数组中。由于3比9小,所以我们需要将9向后移动一个位置,并将3插入到原来9的位置:

1, 4, 3, 9, 7, 6

继续上述操作,最后的有序数组为:

1, 3, 4, 7, 9, 6
1, 3, 4, 6, 7, 9  //最终的有序数组

示例2

假设我们要将一个未排序的字符串数组按照从A到Z的顺序进行排序:

"C", "A", "D", "F", "H", "B", "G", "E"

首先,我们将第一个字符串C看作一个有序子数组,然后从第二个字符串A开始,依次将其插入到有序子数组中。第一次插入操作后,数组变成了:

A, C, D, F, H, B, G, E

此时,有序子数组中有两个元素A和C。接下来,我们将第三个字符串D插入到有序子数组中。由于D比C大,所以D不用做任何操作,数组保持不变:

A, C, D, F, H, B, G, E

接下来,我们将第四个字符串F插入到有序子数组中。由于F比D大,所以F不用做任何操作,数组保持不变:

A, C, D, F, H, B, G, E

接下来,我们将第五个字符串H插入到有序子数组中。由于H比F大,B和G同理,所以需要将这三个字符串向后移动一个位置,并将H插入到原来G的位置:

A, C, D, F, B, G, H, E

接下来,我们将第六个字符串B插入到有序子数组中。由于B比D小,所以我们需要将D, F, H, G, E 向后移动一个位置,并将B插入到原来D的位置:

A, B, C, D, F, H, G, E

继续上述操作,最后的有序数组为:

A, B, C, D, E, F, G, H  //最终的有序数组

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java数据结构与算法之插入排序详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • Android中bindService基本使用方法概述

    Android中bindService基本使用方法概述 在Android应用开发中,使用Service来进行后台服务的处理是非常常见的一种方式。其中,bindService是其中一种Service的使用方式,它可以实现Activity与Service的通信,让Activity能够与Service交互数据、接收和响应Service的回调。 一、bindServ…

    other 2023年6月27日
    00
  • 360初始化失败怎么办?360安全卫士初始化失败的解决方法

    360初始化失败是指在安装、更新或打开360安全卫士时,出现了初始化失败的错误提示。这种错误可能是由于多种原因引起的,包括网络连接问题、文件损坏、系统设置不当等等。以下是解决360初始化失败的几种方法: 方法一:清理残留文件 在计算机桌面上单击右键,选择“新建”-“文本文档”。 将新建的文本文档改名为“clear.bat”,确保文件扩展名后缀为.bat,而不…

    other 2023年6月20日
    00
  • c#截取字符串某个字符之后的字符

    当然,我很乐意为您提供有关“C#截取字符串某个字符之后的字符”的完整攻略。以下是详细的步骤和两个示例: 1 C#截取字符串某个字符之后的字符 在C#应用程序中,有时需要截取字符串某个字符之后的字符。以下是截取字符串某个字符之后的字符的方法: 1.1 使用Substring方法 您可以使用C#的Substring方法截取字符串某个字符之后的字符。以下是使用Su…

    other 2023年5月6日
    00
  • Java内部类及其特点的讲解

    Java内部类及其特点的讲解 什么是内部类? 在Java中,内部类是嵌套在其他类中的类。内部类与外部类有着特殊的关系和访问权限,可以访问外部类的私有成员变量和方法。内部类可以分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。 1. 成员内部类 成员内部类是定义在外部类的类体内的类,可以访问外部类的成员变量和方法,通过实例化外部类的对象来创建成员内…

    other 2023年6月28日
    00
  • python机器学习笔记:svm(1)——svm概述

    以下是“Python机器学习笔记:SVM(1)——SVM概述”的详细讲解,过程中包含两个示例说明的标准Markdown格式文本: Python机器学习笔记:SVM(1)——SVM概述 支持向量机(Support Vector Machine,SVM)是一种常用的分类算法,它可以在高维空间中找到一个最优的超平面,将不同类别的数据分开。本文将介绍SVM的概述,包…

    other 2023年5月10日
    00
  • 为什么鼠标被禁用了?网页鼠标右键被禁用解决方法

    为什么鼠标被禁用了?网页鼠标右键被禁用解决方法 问题描述 在一些网页上,我们可能会发现鼠标右键被禁用了。这一般是由网页开发者通过JavaScript代码实现的。但是,有时候我们确实需要使用鼠标右键进行一些操作,这时候该怎么办呢? 解决方法 我们可以通过以下几种方法来解决鼠标右键被禁用的问题: 方法一:使用快捷键 如果你需要复制或粘贴文本,可以使用快捷键来实现…

    other 2023年6月27日
    00
  • WIN11重置系统和重装有什么区别? win11重装系统对比重置系统介绍

    当你在使用Windows 11系统的时候,有时候会出现一些问题导致系统不稳定或者文件损坏,这时候我们需要对系统进行一些调整,以恢复它的正常运行。此时我们可以采用两种方法来解决问题:重置系统和重装系统。 重置系统 通过重置系统,我们可以重新设置系统,包括删除所有应用程序,文件和用户设置。然而,此操作并不会从计算机中删除操作系统及其相关文件。重置系统方法如下: …

    other 2023年6月20日
    00
  • win7计算机右键属性打不开窗口的解决方法

    标题:win7计算机右键属性打不开窗口的解决方法 问题描述:有些win7用户在右键单击计算机图标并选择“属性”时,得到的结果是无反应,导致无法查看计算机的相关信息。这个问题很困扰,因为计算机的属性是很重要的信息。 解决方法: 步骤1:检查系统文件 ● 打开命令提示符窗口(以管理员身份运行): 点击开始按钮,并在搜索框中输入“cmd”。 右键单击“cmd.ex…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部