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日

相关文章

  • mysql优化器—index_merge

    以下是详细讲解“mysql优化器—index_merge”的完整攻略,过程中包含两个示例说明: mysql优化器—index_merge MySQL是一种流行的关系型数据库管理系统,具有高性能可扩展性强等特点。本攻略将介绍MySQL优化器中的index_merge算法,包括基本概念、使用方法和两示例说明。 基本概念 index_merge是MySQL…

    other 2023年5月10日
    00
  • websocket中文网

    Websocket中文网 Websocket是一项重要的Web技术,它允许浏览器和服务器之间建立一个双向的、实时的数据通道。自HTML5标准引进这项技术以来,Websocket已经成为Web开发中的重要组成部分之一,许多网站都开始使用它来实现实时通信功能。 作为一个Web开发者,学习Websocket技术是非常必要的。这时候,Websocket中文网就是你的…

    其他 2023年3月28日
    00
  • php无限极分类递归排序实现方法

    PHP无限极分类递归排序实现方法 在Web应用程序的开发中,无限极分类是一种很常见的需求,在PHP中实现无限极分类需要使用到递归排序算法。下面详细介绍如何使用PHP实现无限极分类递归排序。 算法思路 无限极分类递归排序算法的思路如下: 1、获取一维数组的所有子节点 2、对每个子节点进行递归排序 3、将排序后的每个子节点添加到父节点中 4、返回所有排好序的子节…

    other 2023年6月27日
    00
  • C++中关于[]静态数组和new分配的动态数组的区别分析

    C++中有两种方式来分配数组的内存空间,分别是静态数组和动态数组(通过 new 关键字实现)。它们之间有着一些区别,接下来我将详细讲解它们的区别和各自的特点。 静态数组 静态数组是在编译时就已经分配好了内存空间的一种数组。这种数组的大小和元素数量在编译时就必须确定下来,之后无法进行扩展和修改。静态数组的内存分配和释放都是由编译器自动处理的,不需要我们手动干预…

    other 2023年6月25日
    00
  • javascript高仿热血传奇游戏实现代码

    下面我来进行详细讲解。 一、前置知识 在进行该项目的实现前,需要掌握以下技术: HTML5 CSS3 JavaScript Canvas 绘图技术 同时需要具备良好的团队合作与代码管理能力。​​​ 二、实现步骤 1.游戏策划 在进行实现前,需要先进行游戏策划。可以参考原版热血传奇的游戏内容,制作游戏的地图、场景、怪物、角色等元素,并规划好游戏的玩法规则。 2…

    other 2023年6月27日
    00
  • C#教程(1) — .Net与C#简介

    C#教程(1) — .Net与C#简介 前言 C#是微软在2000年推出的一种面向对象的编程语言,它基于C++和Java,将两者优点集于一身。C#是结构化、安全、稳定和简单易用的。 C#语言最初是为.NET Framework设计的,因此,了解.NET和C#之间的关系将有助于我们更好地理解这种编程语言。 .NET与C#之间的关系 .NET是由微软开发的一种…

    其他 2023年3月28日
    00
  • jQuery 禁止表单用户名、密码自动填充功能

    以下是详细讲解“jQuery 禁止表单用户名、密码自动填充功能”的完整攻略。 禁止表单自动填充的原因 表单自动填充功能可以帮助用户快捷地填写表单,但在一些场景下,比如登录表单、支付表单等安全性要求较高的表单中,自动填充功能会增加用户的信息泄露风险,因此有必要禁用这个功能。 禁用用户名、密码自动填充的方法 方法一:在HTML中添加autocomplete属性 …

    other 2023年6月27日
    00
  • 如何才能让IE浏览器安装调用未签名的ActiveX控件

    该攻略需要分为两个部分:生成未签名的ActiveX控件和在IE浏览器中安装调用未签名的ActiveX控件。 生成未签名的ActiveX控件 在Visual Studio中创建一个ActiveX控件项目,并将其编译为未签名的DLL文件。 示例代码如下所示: // MyActiveXCtrl.h #pragma once #ifdef MYACTIVEXCTRL…

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