java排序算法之插入排序

news/2024/4/29 9:35:09/文章来源:https://blog.csdn.net/qq_39017153/article/details/131933787

文章目录

  • 📋插入排序概念
  • 📖实现步骤
    • 🔖代码示例
  • 📈总结

在这里插入图片描述

📋插入排序概念


插入排序(Insertion Sort)是一种简单直观的排序算法。它将数组划分为已排序和未排序两个部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置。重复这个过程直到所有元素都被插入到合适的位置。

📖实现步骤


以下是插入排序的算法步骤:

  1. 从第二个元素开始,将其视为当前元素。
  2. 将当前元素与它前面的元素依次比较,如果前面的元素较大,则将前面的元素后移一位,为当前元素腾出插入位置。
  3. 重复步骤2,直到找到当前元素的正确插入位置。
  4. 将当前元素插入到正确的位置。
  5. 重复步骤1-4,直到所有元素都被插入到合适的位置。

🔖代码示例


以下是使用 Java 实现插入排序的示例代码:

/*** @Author: hrd* @CreateTime: 2023/7/25 15:23* @Description:*/
public class InsertionSort {// 测试示例public static void main(String[] args) {int[] array = {5, 2, 9, 1, 7, 6};InsertionSort insertionSort = new InsertionSort();insertionSort.insertionSort(array);System.out.println(Arrays.toString(array));}public void insertionSort(int[] array) {if (array == null || array.length <= 1) {return;}int n = array.length;for (int i = 1; i < n; i++) {int key = array[i];int j = i - 1;// 向前比较并后移元素,直到找到正确的插入位置while (j >= 0 && array[j] > key) {array[j + 1] = array[j];j--;}// 插入当前元素到正确的位置array[j + 1] = key;}}}

📈总结


  • 在以上示例中,我们创建了一个 InsertionSort 类的实例,并调用 insertionSort 方法对输入数组 {5, 2, 9, 1, 7, 6} 进行插入排序。最后输出结果。
  • 插入排序适合以下场景:
    1. 小规模数组:相比于其他高效的排序算法(如快速排序、归并排序),插入排序在小规模数组上的性能更好。当数组元素数量较小时,插入排序可以是一个简单且有效的选择。
    2. 基本有序的数组:如果数组已经近乎有序或部分有序,插入排序的性能会更好。由于插入排序的特点是将较小的元素向前移动,当数组接近有序时,只需要少量的比较和移动操作就可以完成排序。
    3. 部分有序的数组:如果数组中存在一些部分有序的子数组(例如,某些元素的顺序是正确的),插入排序可以通过对这些子数组进行插入操作来加快排序过程。这使得插入排序在处理部分有序数据时表现出良好的性能。
    4. 稳定性要求:插入排序是一种稳定的排序算法,即相等元素的相对顺序不会改变。在一些需要保持相同元素相对顺序的场景下,插入排序是一个很好的选择。
  • 总之,插入排序适用于处理小规模的数组,对基本有序、部分有序或需要保持稳定性的数组都表现出良好的性能。然而,对于大规模乱序的数组,插入排序的效率将不如其他高级排序算法。因此,在实际应用中需要根据数据规模和特点选择合适的排序算法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_335776.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试开源C#人脸识别模块ViewFaceCore(4:口罩检测、性别预测、年龄预测)

ViewFaceCore模块中的MaskDetector类支持识别人脸是否戴了口罩或有遮挡&#xff0c;主要调用PlotMask函数执行口罩检测操作&#xff0c;其函数原型如下所示&#xff1a; PlotMaskResult PlotMask<T>(T image, FaceInfo info)public class PlotMaskResult{//// 摘要:// …

Amazon Redshift Serverless – 现已正式推出新功能

去年在 re:Invent 上&#xff0c;我们推出了 Amazon Redshift Serverless 的预览版&#xff0c;这是 Amazon Redshift 的无服务器选项&#xff0c;可让您分析任何规模的数据&#xff0c;而无需管理数据仓库基础设施。您只需要加载和查询数据&#xff0c;并且只需为使用的内容付…

基于linux下的高并发服务器开发(第三章)- 3.10 死锁

deadlock.c #include <stdio.h> #include <pthread.h> #include <unistd.h>// 全局变量&#xff0c;所有的线程都共享这一份资源。 int tickets 1000;// 创建一个互斥量 pthread_mutex_t mutex;void * sellticket(void * arg) {// 卖票while(1) {// 加锁pt…

伦敦金在非农双向挂单

对伦敦金投资有一定经验的投资者都知道&#xff0c;在非农时期&#xff0c;伦敦金市场会出现很大的波动&#xff0c;那么我们如何才能抓住这些波动呢&#xff1f;答案是很难的。但是&#xff0c;有些投资者在多年实践中发明了一种双向挂单的方法&#xff0c;这里和大家一切分享…

SpringBoot Redis 多数据源集成支持哨兵模式和Cluster集群模式

Redis 从入门到精通【应用篇】之SpringBoot Redis 多数据源集成支持哨兵模式Cluster集群模式、单机模式 文章目录 Redis 从入门到精通【应用篇】之SpringBoot Redis 多数据源集成支持哨兵模式Cluster集群模式、单机模式0.前言说明项目结构Pom 依赖 1. 配置1.1 通用配置&#xf…

android app控制ros机器人二

Ros-Mobile的使用基本熟悉&#xff0c;接下来熟悉代码&#xff0c;记录中间的问题。 GitHub - ROS-Mobile/ROS-Mobile-Android: Visualization and controlling application for Android 使用android studio打开项目后有bug。 BUG&#xff1a; 1.FAILURE: Build failed wit…

RL 实践(5)—— 二维滚球环境【REINFORCE Actor-Critic】

本文介绍如何用 REINFORCE 和 Actor-Critic 这两个策略梯度方法解二维滚球问题参考&#xff1a;《动手学强化学习》完整代码下载&#xff1a;6_[Gym Custom] RollingBall (REINFORCE and Actor-Critic) 文章目录 1. 二维滚球环境2. 策略梯度方法2.1 策略学习目标2.2 策略梯度定…

2023年深圳杯数学建模C题无人机协同避障航迹规划

2023年深圳杯数学建模 C题 无人机协同避障航迹规划 原题再现&#xff1a; 平面上A、B两个无人机站分别位于半径为500 m的障碍圆两边直径的延长线上&#xff0c;A站距离圆心1 km&#xff0c;B站距离圆心3.5 km。两架无人机分别从A、B两站同时出发&#xff0c;以恒定速率10 m/s…

gensim conherence model C_V 值与其他指标负相关BUG

在我用gensim3.8.3 conherence model分析京东评论主题模型时&#xff0c; C_V 与npmi、u_mass出现了强烈的皮尔逊负相关&#xff1a; 这些地方也反映了类似问题&#xff1a; https://github.com/dice-group/Palmetto/issues/12 https://github.com/dice-group/Palmetto/issue…

微软亚研院提出模型基础架构RetNet或将成为Transformer有力继承者

作为全新的神经网络架构&#xff0c;RetNet 同时实现了良好的扩展结果、并行训练、低成本部署和高效推理。这些特性将使 RetNet 有可能成为继 Transformer 之后大语言模型基础网络架构的有力继承者。实验数据也显示&#xff0c;在语言建模任务上&#xff1a; RetNet 可以达到与…

Rust vs Go:常用语法对比(十三)

题图来自 Go vs. Rust: The Ultimate Performance Battle 241. Yield priority to other threads Explicitly decrease the priority of the current process, so that other execution threads have a better chance to execute now. Then resume normal execution and call f…

SpringBoot 配置⽂件

1.配置文件作用 整个项⽬中所有重要的数据都是在配置⽂件中配置的&#xff0c;⽐如&#xff1a; 数据库的连接信息&#xff08;包含⽤户名和密码的设置&#xff09;&#xff1b;项⽬的启动端⼝&#xff1b;第三⽅系统的调⽤秘钥等信息&#xff1b;⽤于发现和定位问题的普通⽇…

VMware horizon 8 建立手动桌面池

准备一台win10的虚拟机&#xff0c;改静态IP,计算机名&#xff0c;加入域&#xff0c;把Agent软件上传到机器中。 2&#xff1a;右键管理员身份安装程序。 一般默认 根据自己实际情况选择 启用桌面远程功能 安装完成 安装完成以后创建一个快照&#xff0c;以后是好知道机…

模拟Stevens Lewis描述的小型飞机纵向动力学的非线性动态反演控制器研究(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 针对Stevens和Lewis描述的小型飞机纵向动力学的非线性动态&#xff0c;研究非线性动态反演控制器可以是一个有趣的课题。动态反演控制器的目标…

会捷通云视讯 list 目录文件泄露漏洞

劳动永远是医治精神创伤的良药。 漏洞描述 会捷通云视讯某个文件 list参数 存在目录文件泄露漏洞&#xff0c;攻击者通过漏洞可以获取一些敏感信息 漏洞复现 构造payload访问漏洞url&#xff1a; /him/api/rest/V1.0/system/log/list?filePath../漏洞证明&#xff1a; 文…

【iOS】KVOKVC原理

1 KVO 键值监听 1.1 KVO简介 KVO的全称是Key-Value Observing&#xff0c;俗称"键值监听"&#xff0c;可以用于监听摸个对象属性值得改变。 KVO一般通过以下三个步骤使用&#xff1a; // 1. 添加监听 [self.student1 addObserver:self forKeyPath:"age"…

音视频——帧内预测

H264编码(帧内预测) 在帧内预测模式中&#xff0c;预测块P是基于已编码重建块和当前块形成的。对亮度像素而言&#xff0c;P块用于44子块或者1616宏块的相关操作。44亮度子块有9种可选预测模式&#xff0c;独立预测每一个44亮度子块&#xff0c;适用于带有大量细节的图像编码&…

云安全攻防(二)之 云原生安全

云原生安全 什么是云原生安全&#xff1f;云原生安全包含两层含义&#xff1a;面向云原生环境的安全和具有云原生特征的安全 面向云原生环境的安全 面向云原生环境的安全的目标是防护云原生环境中的基础设施、编排系统和微服务系统的安全。这类安全机制不一定会具有云原生的…

交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64

1.交叉编译是什么&#xff0c;为什么要交叉编译 编译&#xff1a;在一个平台上生成在该平台上的可执行代码交叉编译&#xff1a;在一个平台上生成在另一个平台上的可执行代码交叉编译的例子&#xff1a;如51单片机的可执行代码&#xff08;hex文件&#xff09;是在集成环境kei…

【C#】医学实验室云LIS检验信息系统源码 采用B/S架构

基于B/S架构的医学实验室云LIS检验信息系统&#xff0c;整个系统的运行基于WEB层面&#xff0c;只需要在对应的工作台安装一个浏览器软件有外网即可访问&#xff0c;技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Redis等。 一、系统概况 本系统是将各种生化、免疫、…