宝藏速成秘籍(5)插入排序法

news2025/2/25 4:09:46

一、前言

1.1、概念

       插入排序(Insertion Sort)是一种简单直观的排序算法,其工作原理类似于人们整理一手扑克牌。插入排序通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

 1.2、排序步骤  

1. 从第一个元素开始,该元素可以认为已经被排序。
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描。
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置。
4. 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置。
5. 将新元素插入到该位置后。
6. 重复步骤 2~5。

二、方法分析 

       插入排序(Insertion Sort)是一种简单直观的排序算法,适合处理小规模数据集。插入排序是一个基础的排序算法,虽然在大规模数据集上性能不佳,但由于其简单性和对小规模或接近有序数据集的高效处理能力,依然在某些应用场景中具有实际价值。理解插入排序的原理和性能分析,可以为学习更复杂的排序算法打下坚实的基础。

三、举例说明 

1. 初始数组:[5, 2, 4, 6, 1, 3]
2. 取出2,插入到5前:[2, 5, 4, 6, 1, 3]
3. 取出4,插入到5前:[2, 4, 5, 6, 1, 3]
4. 取出6,保持不变:[2, 4, 5, 6, 1, 3]
5. 取出1,插入到2前:[1, 2, 4, 5, 6, 3]
6. 取出3,插入到4前:[1, 2, 3, 4, 5, 6]  

 四、编码实现 

 下面是用Java实现的插入排序算法:

public class InsertionSort {
    // 插入排序方法
    public static void insertionSort(int[] arr) {
        // 遍历从第二个元素到最后一个元素
        for (int i = 1; i < arr.length; i++) {
            int key = arr[i];
            int j = i - 1;
            // 将大于key的元素向后移动一位
            while (j >= 0 && arr[j] > key) {
                arr[j + 1] = arr[j];
                j = j - 1;
            }
            // 将key插入到正确的位置
            arr[j + 1] = key;
        }
    }

    // 主方法,进行测试
    public static void main(String[] args) {
        int[] arr = {12, 11, 13, 5, 6};
        System.out.println("排序前的数组:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
        System.out.println();

        insertionSort(arr);

        System.out.println("排序后的数组:");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
}

 运行结果:

 五、方法评价   

#### 1. 时间复杂度

插入排序的时间复杂度取决于输入数据的初始状态。

-最坏情况时间复杂度: O(n^2)
  - 最坏情况发生在数组完全逆序时。每次插入一个新的元素都需要与当前有序部分的所有元素进行比较。
  - 例如,对于数组 `[5, 4, 3, 2, 1]`,每插入一个元素,都需要比较 n-1 次、n-2 次,依此类推,总的比较次数为 (1 + 2 + ... + (n-1) = frac{(n-1) \cdot n}{2} = O(n^2)。
  
-平均时间复杂度: O(n^2)
  - 在随机排列的数组上,插入排序的平均时间复杂度也是O(n^2)。

-最好情况时间复杂度: O(n)
  - 最好情况发生在数组已经有序时。每次插入元素时,只需要进行一次比较即可。
  - 例如,对于数组 `[1, 2, 3, 4, 5]`,每个元素都在其正确位置上,不需要移动。

#### 2. 空间复杂度

-空间复杂度: O(1)

#### 3. 稳定性

-稳定性: 稳定
  - 当两个元素相等时,插入排序不会改变它们的相对顺序。

#### 4. 适用场景

插入排序在以下几种情况下表现较好:

-小规模数据集:由于其实现简单,对于小规模数据集插入排序非常高效。
-基本有序的数据集:如果输入数据接近有序,插入排序的性能会接近 \(O(n)\)。
-在线排序:插入排序可以用来处理数据流,当数据是逐个到达时,可以立即进行排序。

#### 5. 优缺点

优点:

- 简单易实现。
- 对于小规模数据集和近似有序的数据集非常高效。
- 原地排序,不需要额外的内存空间。

缺点:

- 对于大规模数据集,时间复杂度较高,不适合使用。
- 与高级排序算法(如快速排序、归并排序)相比,插入排序的性能较差。

结语   

不要害怕挫折

去尝试征服它

成就最好的自己

!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Javaweb03-Servlet技术1(Servlet,ServletConfig,ServletContext)

Servlet技术(Servlet,ServletConfig,ServletContext) 1.Servlet的概述 Servlet是运行在Web服务器端的Java应用程序&#xff0c;它使用Java语言编写。与Java程序的区别是&#xff0c;Servlet 对象主要封装了对HTTP请求的处理&#xff0c;并且它的运行需要Servlet容器(Tomcat)的…

MySQL与PostgreSQL关键对比四(关联查询性能)

引言&#xff1a;MySQL单表的数据规模一般建议在百万级别&#xff0c;而PostgreSQL的单表级别一般可以到亿级&#xff0c;如果是MPP版本就会更多。从基础数据建议上&#xff0c;不难看出&#xff0c;MySQL在Join的情况下也就是主要查询的情况下性能和PostgreSQL相差还是很大的。…

Navicat和SQLynx产品功能比较一(整体比较)

Navicat和SQLynx都是数据库管理工具&#xff0c;在过去的二十年中&#xff0c;国内用户主要是使用Navicat偏多&#xff0c;一般是个人简单开发需要&#xff0c;数据量一般不大&#xff0c;开发相对简单。SQLynx是最近几年的数据库管理工具&#xff0c;Web开发&#xff0c;桌面版…

【odoo】odoo中对子数据的独有操作[(0, 0, {‘name‘: ‘demo‘})]

概要 在Odoo中&#xff0c;有种写法用于操作 one2many 或 many2many 字段时&#xff0c;描述如何在数据库中创建、更新或删除相关记录。具体而言&#xff0c;这是一种命令格式&#xff0c;被称为 "commands" 或 "special command tuples"&#xff0c;用于 …

高考志愿填报,大学读什么专业比较好?

高考分数出炉后&#xff0c;选择什么样的专业&#xff0c;如何去选择专业&#xff1f;于毕业生而言是一个难题。因为&#xff0c;就读的专业前景不好&#xff0c;意味着就业情况不乐观&#xff0c;意味着毕业就是失业。 盲目选择专业的确会让自己就业时受挫&#xff0c;也因此…

服务器数据恢复—OceanStor存储中NAS卷数据丢失如何恢复数据?

服务器存储数据恢复环境&故障&#xff1a; 华为OceanStor某型号存储。工作人员在上传数据时发现该存储上一个NAS卷数据丢失&#xff0c;管理员随即关闭系统应用&#xff0c;停止上传数据。这个丢失数据的卷中主要数据类型为office文件、PDF文档、图片文件&#xff08;JPG、…

Hbase搭建教程

Hbase搭建教程 期待您的关注 ☀小白的Hbase学习笔记 目录 Hbase搭建教程 1.上传hbase的jar包并解压 2.重新登录 3.启动zookeeper 4.配置环境变量 5.关闭ZK的默认配置 6.修改hbase-site.xml文件 7.修改regionservers文件 8.将配置好的文件分发给其它节点 9.配置环境变量…

Vue34-销毁流程

一、销毁流程预览 二、vm.$destroy()函数的调用&#xff0c;开始销毁流程 一个应用只有一个vm&#xff0c;但是一个vm会管理一堆组件实例对象&#xff08;和vm很像&#xff1a;微型的vm&#xff09;。 销毁流程中解绑的事件监听器&#xff0c;是自定义事件&#xff0c;不是原…

大白菜PE系统进入时一直 ACPI_BIOS_ERROR

安装系统PE不支持&#xff0c;主板不兼容&#xff0c;换个WIN10的PE就解决了&#xff0c;跟之前部分电脑需要WIN8的PE同理 WIN10PE教程 WIN8PE教程

面试题:Redis是什么?有什么作用?怎么测试?

有些测试朋友来问我&#xff0c;redis要怎么测试&#xff1f;首先我们需要知道&#xff0c;redis是什么&#xff1f;它能做什么&#xff1f; redis是一个key-value类型的高速存储数据库。 redis常被用做&#xff1a;缓存、队列、发布订阅等。 所以&#xff0c;“redis要怎么测试…

AI时代新爬虫:网站自动转LLM数据,firecrawl深度玩法解读

在大模型的时代&#xff0c;爬虫技术也有了很多新的发展&#xff0c;最近出现了专门针对大模型来提取网站信息的爬虫&#xff0c;一键将网页内容转换为LLM-ready的数据。今天我们介绍其中的开源热门代表&#xff1a;firecrawl。 firecrawl 是什么 FireCrawl是一款创新的爬虫工…

文件初阶入门(葵花宝典)

1. 文件的顺序读写 1.1 顺序读写函数的介绍 函数名 功能 适用于 fgetc 字符输入函数 所有输入流 fputc 字符输出函数 所有输出流 fgets 文本行输入函数 所有输入流 fputs 文本行输出函数 所有输出流 f…

hrm人力管理系统源码(从招聘到薪酬的全过程人力管控系统)

一、项目介绍 一款全源码可二开&#xff0c;可基于云部署、私有部署的企业级数字化人力资源管理系统&#xff0c;涵盖了招聘、人事、考勤、绩效、社保、酬薪六大模块&#xff0c;解决了从人事招聘到酬薪计算的全周期人力资源管理&#xff0c;符合当下大中小型企业组织架构管理运…

【FPGA】静态分析与时序约束(持续更新

Reference&#xff1a; V2静态时序分析与时序约束文档 入门 无时序约束场景中&#xff0c;普通图像显示不清晰&#xff0c;千兆网口接收Ethernet package 数据不正常&#xff0c;红外场景中图像显示不正常 Definition&#xff1a; 我们提出一些特定的时序要求&#xff08;或…

Application Studio 学习笔记(2)

一、rest-erp 1、设置需要调用的BO服务名和BO方法名 2、设定BO方法的参数 方法的参数名已经自动获取&#xff0c;常规类型的参数取值直接在Method Parameters中设定 DataSet类型的参数取值&#xff0c;需要在Request Parameters中设定 设置Parameter Path为DataSet参数名&…

安川机器人MA1440减速机维修方法

一、安川机械臂减速器维修方法 1. 齿轮磨损维修 对于轻微磨损的齿轮&#xff0c;可以通过重新调整啮合间隙来恢复性能。对于严重磨损的齿轮&#xff0c;需要更换新安川MA1440机械手齿轮箱齿轮。 2. 轴承损坏维修 对于损坏的轴承&#xff0c;需要更换新的轴承。在更换过程中&…

【LLM之RAG】Adaptive-RAG论文阅读笔记

研究背景 文章介绍了大型语言模型&#xff08;LLMs&#xff09;在处理各种复杂查询时的挑战&#xff0c;特别是在不同复杂性的查询处理上可能导致不必要的计算开销或处理不足的问题。为了解决这一问题&#xff0c;文章提出了一种自适应的查询处理框架&#xff0c;动态选择最合…

【文心智能体分享】日记周报助手

引言 在繁忙的实习生活中&#xff0c;你是否曾为如何整理日常的工作日志、周报、月报而烦恼&#xff1f;现在&#xff0c;我们为你带来了一个全新的智能体——“日记周报助手”&#xff0c;它将成为你实习过程中的得力助手&#xff0c;帮你轻松整理实习日志&#xff0c;让你的…

运算符分为哪几类?哪些运算符常用作判断?简述运算符的优先级

运算符包含6大类&#xff1a;算术运算符、赋值运算符、比较运算符、逻辑运算符、位运算符、三元&#xff08;目&#xff09;运算符。 逻辑运算符常用作布尔判断 typeof 运算符: typeof 运算符用于确定变量或表达式的数据类型&#xff0c;并返回一个表示类型的字符串。 typeof …

grpc代理服务的实现(一)

最近公司需要无感知基于服务代号来实现通信, 并监控和管理通信连接&#xff0c;目前公司使用的是如下的逻辑(当然逻辑简化了&#xff0c;但是思想不变) 目录 简单的原理图代理服务的实现创建 tls tcp 服务, 用于grpc client 和 grpc service 通信保存 与 代理服务建立的 grpc …