算法导论——插入排序——伪代码和Java实现

2023-11-07

第二章第一节:插入排序

    我们首先介绍插入排序。相信大部分人都打过扑克牌,许多人喜欢发一张牌就拿一张牌到手上,并且按顺序来放好牌。开始时我们左手为空,牌在桌子上。然后我们每次从桌子上拿走一张牌并将它插入左手中的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。

伪代码:

INSERTION-SORT(A)			//A是数组
 for j = 2 to A.length
	key = A[j]
	//(将A[j]插入排序序列A[1..j-1])
	i = j - 1
	while i > 0 and A[i] > key
		A[i+1] = A[i]
		i = i - 1
	A[i+1] = key

Java代码实现:

//升序排序
public void InsertSortAscending(int[] A){
		for(int j = 1;j < A.length;j++){
			int key = A[j];
			//将A[j]插入排序序列A[1..j-1]
			int i = j - 1;
			while(i >= 0 && A[i] > key){
				A[j] = A[i];
				i = i - 1;
			}
			A[i+1] = key;
		}
}

    下面我们来看一下插入排序的运行步骤
    用数组A[2,4,7,1,3,6]来举例子
    每次for循环中,黄色的长方形是A[j]的值,在第7行的while循环中将它与其左边的蓝色的长方形中的值进行比较。蓝色的箭头指出数组在第8行向右移动一个位置,黄色的箭头指出第11行关键字被移到的地方。
    第一次循环:如下图所示
第一步
    第二次循环:如下图所示
第二步
    注意:这里A[2]大于A[1],因为A[1]肯定是大于A[0]的所以没必要在比较A[2]与A[1]的大小。while循环因不满足条件会退出。

    第三次循环:如下图所示
第三步
    第四次循环:如下图所示
第四步
    第五次循环:如下图所示
第五步
    A数组此时如图所示:
A数组最后的状态
    第六次循环时j为6不满足循环j<A.length条件,循环退出。
‘-----------------------------------------------------------------’
    插入排序的讲解到这里已经结束
    其他算法:[算法导论——各章节算法伪代码和java实现]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

算法导论——插入排序——伪代码和Java实现 的相关文章

  • IBM Websphere MQ - 用于 Tomcat 部署的 EJB 和 MDB 迁移

    我已经为此苦苦挣扎了很长一段时间 我有一个 IBM Websphere MQ 它使用 EJB 和 MDB 以下是配置ejb mdb的地方
  • 在java代码中创建postgresql表

    我有一个与 postgreSQL 数据库连接的 java 代码 现在 我希望当它连接到数据库时 我还将创建数据库表 但我的问题是 它不会创建数据库 我不知道问题是什么 这是我的代码 Statement st null ResultSet r
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • java中高效的输入流到字符串方法

    因此 我在 Java 中的 诚然非常简单 应用程序上运行探查器 令我惊讶的是 仅次于需要在时间上发出 HTTP 请求的方法的是我的方法 inputStreamToString方法 目前它的定义如下 public static String
  • 使用 https 的 Web 服务身份验证给出错误

    我编写了一个简单的 Web 服务 并使用摘要和 HTTPS 身份验证来保护它 我已经使用 Java 中的 keytool 生成了我的证书 当我通过创建 war 文件在 Tomcat 中部署 Web 服务时 axis 的欢迎页面正确显示 但是
  • 当我们使用赋值而不是比较时,如何评估 if/while 条件?

    我在学习 Java 的 OCA OCP 时发现了这个令人惊讶的事情 下面是第一段代码 其中 if 测试条件 部分 让我惊讶 public class BooleanIf public static void main String args
  • 在 Eclipse 中删除空块之前的新行

    我更喜欢奥尔曼式 http en wikipedia org wiki Brace style Allman style大括号 例如 if foo magical prancing unicorn stuff 而不是 if foo unma
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 从字符串中删除重音符号

    Android 中有没有什么方法 据我所知 没有 java text Normalizer 可以从字符串中删除任何重音 例如 变成 eau 如果可能的话 我想避免解析字符串来检查每个字符 java text NormalizerAndroi
  • 为休息服务实施 JUnit 测试

    我必须为我的休息服务实现一些 JUnit 测试 例如 这是我的休息服务之一 Path dni fe public class HelloWorld POST Path home Consumes MediaType APPLICATION
  • 始终将双精度舍入

    我怎么总是能把一个double to an int 并且永远不要将其四舍五入 我知道Math round double 但我希望它始终向上舍入 所以如果是的话3 2 四舍五入为 4 您可以使用Math ceil method 请参阅Java
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • Java 8:如何创建毫秒、微秒或纳秒的 DateTimeFormatter?

    我需要创建格式化程序来解析具有可选的毫秒 微米或纳秒分数的时间戳 例如 对于我的需求 我看到以下机会 DateTimeFormatter formatter new DateTimeFormatterBuilder append DateT
  • 添加 char 和 int

    据我了解 字符是一个字符 即一个字母 一个digit 标点符号 制表符 空格或类似的东西 因此 当我这样做时 char c 1 System out println c 输出 1 正是我所期望的 那么为什么当我这样做时 int a 1 ch
  • 线程数组?

    所以我在理解如何避免线程的顺序执行时遇到了问题 我试图创建一个线程数组并在单独的循环中执行 start 和 join 函数 这是我现在拥有的代码示例 private static int w static class wThreads im
  • 在 Spring MVC 中将请求写入文件

    我希望能够将整个请求写入 Spring MVC 控制器中的文件 我已尝试以下操作 但即使我使用大量参数发出 POST 请求 文件也始终为空 RequestMapping method RequestMethod POST value pay
  • Spring MVC:通用 DAO 和服务类

    我正在 Spring MVC 中编写网页 我使用 Generic DAO 编写了所有 DAO 现在我想重写我的服务类 我该如何写 通用服务 我的 DAO 如下 DAO package net example com dao import j
  • 用于生成 ISO 文件的 Maven 插件

    有没有可以生成ISO镜像的maven插件 我需要获取一些模块的输出 主要是包含 jar 的 zip 文件 并将它们组合成一个 ISO 映像 Thanks 现在有一个 ISO9660 maven 插件可以完成这项工作 https github
  • Axis2 的 wsdl2java 在 RPC/Encoded 样式 Web 服务上失败

    Axis2 有替代方案吗 或者让它工作的方式 例如不同的数据绑定 Retrieving document at Exception in thread main org apache axis2 wsdl codegen CodeGener
  • FetchType.LAZY 不适用于休眠中的 @ManyToOne 映射

    简而言之 我的 Child 类与 Parent 类之间存在多对一的关系 我想加载所有的孩子 而不必加载他们的父母详细信息 我的孩子班级是 Entity public class Child implements Serializable I

随机推荐

  • 学习感悟(基于轻量化卷积神经网络的人脸表情识别方法)

    轻量化卷积神经网络的人脸表情识别方法 文献重点 主要研究方法 感悟 文献重点 主要研究方法 感悟 1 文献重点 面部表情识别是生物信息识别 模式识别 人机交互与人工智能等领域的重要研究课题 深度神经网络的兴起为高精度面部表情识别的研究提供了
  • 解决json object转string,value值存在特殊符号,无法解析问题

    昨天在JSON stringify 转数组的时候 发现一直报错 最终确定原因为string中的空格在html显示的时候 会自动加上 nbsp 知道了问题所在 下面讲解如何解决问题 我们在取数据时 用HTMLDecode2 方法过滤下特殊字符
  • Mysql 中 1062 –Duplicate entry '1' for key 'PRIMARY'

    我遇到的这种问题 就是在数据库中插入数据时 主键重复了 换个新的主键就可以了 比如之前有个主键是1 新添加了一条数据主键也设置成1了
  • easyexcel工具包使用报错:NoClassDeffoundError

    错误日志 easyexcel操作excel pom导包失败 引入外部jar包 处理异常报错 报错原因 easyexcel缺失关键依赖包 解决 修改maven配置文件 加入alibaba镜像地址 重新加载包 问题解决
  • GIS坐标系统

    最新在看GIS的理论知识 坐标系统这块比较抽象 B站上搜到到一个博主的视频 对这块讲解的比较通俗易懂 这里记录一下 地理坐标系统 地理坐标系统是地球表面空间要素的定位参照系统 地理坐标系统是由经度和维度定义的 经度和维度都是用角度量的 经度
  • oracle ebs应付模块表,oracle ebs 11i 数据表大全(总帐、应收、应付等各模块) 免费...

    OWNER OBJECT NAME OBJECT TYPE CREATED PO PO LOCATION T ABLE TABLE PO PO VENDOR S TABLE PO PO LINE LOCA PO PO VENDORS T A
  • 大厂怎么做

    作者 郑东博士 快手 推荐算法技术总监 整理 DataFunTalk 大家好 这里是 NewBeeNLP 快手是中国领先的短视频和直播社区 拥有超过3亿的DAU和丰富的社交数据 快手秉承的价值观是真实 多元 美好 有用 致力于提高每一个用户
  • Hive常用窗口函数

    目录 一 概述 1 定义 2 语法 3 演示数据 二 窗口函数 序列 1 row number 2 rank 3 dense rank 4 ntile n 5 percent rank 三 窗口函数 聚合 1 count 2 sum 3 a
  • 转移文件,从大到小输出shell

    bin bash if d tmp then mkdir tmp fi find size 10k type f iname txt xargs i cp tmp echo gt gt gt gt gt gt gt gt gt gt gt
  • 线程中断是怎么回事

    线程中断相关方法 Thread interrupt 设置线程中断状态 true Thread isInterrupted 判断线程的中断状态 Thread interrupted 返回线程的中断状态 并清除 下次再判断中断状态就是false
  • vue中利用flex布局实现横向时间轴简化

    一 最初版本 简单实现了横向时间轴 1 初次实现效果如图 2 代码如下 div class timeline body bgcolor div class timeline title span class timeline title i
  • layui表格隐藏列的简单实现方法

    需求 渲染表格的时候 比如id在内的一些列是不需要展示给用户看的 但是在操作表格的时候还需要用得到 这就需要隐藏列 的功能 实现效果 页面上不显示 但是能获取到id的值 实现方法 table render id id 可以在这里设置需要隐藏
  • CTF入门学习笔记——Crypto密码(编码)

    文章目录 CTF入门学习笔记 Crypto密码 编码 BASE编码 BASE16 BASE32 BASE64 BASE85 AFCTF 2018 BASE Uuencode编码 SWPUCTF 2021 新生赛 crypto8 Rabbit
  • 字节一面:HTTPS 会加密 URL 吗?

    有朋友在面试字节 被问到这个问题 HTTPS 会加密 URL 吗 答案是 会加密的 因为 URL 的信息都是保存在 HTTP Header 中的 而 HTTPS 是会对 HTTP Header HTTP Body 整个加密的 所以 URL
  • 分享一些让你目瞪口呆的Java代码技巧,收藏起来以后一定用的上

    导语 自从毕业后 今年已经是我工作的第 8 个年头了 我甚至都快忘记了到底是那年毕业的 从出来本人一直在做 Java 相关的工作 现在终于有时间坐下来 写一篇关于 Java 写法的一篇文章 来探讨一下如果你真的是一个 Java 程序员 那你
  • OpenWrt应用开发入门教程

    我的开发日志 目录 1 SDK生成的方法 2 SDK工具包安装 解压缩 设置环境变量 3 编译第1个C代码 4 编译Openwrt的IPK软件包 a 编译MQTT C Client依赖的openSSL b 编译MQTT C Client动态
  • 《深入理解JAVA虚拟机》第三章

    垃圾收集机制 简称GC 比Java诞生的早 GC要完成的三件事 那些内存需要回收 什么时候回收 怎么回收 判断一个对象是否存活简单的方法 在对象中加入一个引用计数器 当一个地方引用它时 计数器值加一 当引用失效时 计数器值减一 当计数器值为
  • 2020自动化测试岗位需求的7项必备技能(更新版)

    随着敏捷和DevOps等新时代项目开发方法逐渐取代旧的瀑布模型 测试需求在业界不断增长 测试人员现在正在与开发人员一起工作 自动化测试在许多方面极大地取代了手动测试 如果您是自动化测试领域的新手 刚雇用您的组织将期望您快速 开箱即用 并能够
  • 配置你的代理服务器(Ubuntu)这样平常就不用开魔法了

    打开终端 在 Ubuntu 中 您可以按下 Ctrl Alt T 组合键来打开终端 编辑 etc environment 文件 在终端中 输入以下命令来编辑 etc environment 文件 sudo gedit etc environ
  • 算法导论——插入排序——伪代码和Java实现

    第二章第一节 插入排序 我们首先介绍插入排序 相信大部分人都打过扑克牌 许多人喜欢发一张牌就拿一张牌到手上 并且按顺序来放好牌 开始时我们左手为空 牌在桌子上 然后我们每次从桌子上拿走一张牌并将它插入左手中的位置 为了找到一张牌的正确位置