直接插入排序

news2024/12/22 20:42:36

一、概念及其介绍

插入排序(InsertionSort),一般也被称为直接插入排序。
对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增 1 的有序表。
在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。

二、过程图示

假设前面 n-1(其中 n>=2)个数已经是排好顺序的,现将第 n 个数插到前面已经排好的序列中,然后找到合适自己的位置,比n大的跟n交换位置,直到找到比n小的,最后使得插入第n个数的这个序列也是排好顺序的。
按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。
从小到大的插入排序整个过程如图示:
第一轮:从第二位置的 6 开始比较,比前面 7 小,交换位置。
第一轮:从第二位置的 6 开始比较,比前面 7 小,交换位置。
在这里插入图片描述
第二轮:第三位置的 9 比前一位置的 7 大,无需交换位置。
在这里插入图片描述

第三轮:第四位置的 3 比前一位置的 9 小交换位置,依次往前比较。
在这里插入图片描述
以此类推

三、代码

对[1,9,6,5,7,6,8,2,4]进行直接插入排序

public static void sort(int[] a) {
        for (int i = 1; i < a.length; i++) { //a[0]不用排序
            int temp = a[i]; //记录待排序元素的值
            for (int j = i - 1; j >=0; j--) {
                if (temp < a[j]) {
                    a[j + 1] = a[j];
                } else {
                    break;
                }
                a[j] = temp;
            }
            System.out.println("第" + i + "轮排序的结果为" + Arrays.toString(a));
        }
    }

四、复杂度

时间复杂度也是 O(n^2),空间复杂度为常数阶 O(1)

一.时间复杂度

时间复杂读的确定
预估基本操作执行的次数,这个此时就是问题规模n的函数f(n),用大O渐进法表示
T(n)=O(f(n))
例题:

void fun(int n)
(
	for(int i 0:i<n:i++)
	{
		int flag i;
	}
}

时间复杂度O(n),因为int flag i;这行代码运行了n次

void fun2(int n)
{
    int i=1:
    while (i <=n)
   {
      i=1*2:
   }
}

时间复杂度O(logn)
复杂度计算运用的公式
在这里插入图片描述

二.空间复杂度
预估算法运行过程中临时 占用的存储空间,这个存储空间的大小是问题规模n的函数g(n)
S(n)=O(g(n))
运行过程中临时占用的存储空间孕
1、函数的形参
2、函数体内的局部变量

void Spacel(int n)
{
		int k=0;
        for(int i 0;i n :i++)
        {
           k++:
        }
}

空间复杂度O(1)
三.大O渐进法表示形式
● 如果只含常数项,那么就是O(1)
● 只保留最高阶项
● 如果最高阶项存在且系数不为1,则去除系数
在这里插入图片描述

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

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

相关文章

你是否曾经为自己写的代码而感到懊恼?那如何才能写出高质量代码呢?

这里写目录标题 一、 前言二、高质量代码的特征三、编程实践技巧1. 遵循编码规范2. 使用有意义的变量名和函数名3. 减少代码重复4. 使用注释5. 编写单元测试6. 使用设计模式7. 使用版本控制工具8. 保持代码简洁9. 优化代码性能10. 学习和借鉴他人的代码总结 一、 前言 写出高质…

Python入门教程+项目实战-11.5节: 程序实战-选择排序算法

目录 11.5.1 排序算法简介 11.5.2 选择排序算法 11.5.3 系统学习python 11.5.1 排序算法简介 所谓排序&#xff0c;是指将数据集合中的元素按从小到大的顺序进行排列&#xff0c;或按从大到小的顺序进行排列。前者称为升序排序&#xff0c;后者称为降序排序。在数据结构与算…

ChatGPT会颠覆SEO内容创作吗

近几年 AI 的发展日新月异。除了搜索算法本身大规模应用人工智能&#xff0c;我也一直关注着 AI 用于写作的进展。 上篇关于 Google 有用内容更新的帖子还在说&#xff0c;高质量内容创作是 SEO 最难的事之一&#xff0c;对某些网站来说&#xff0c;如果能有工具帮助&#xff…

python毕业设计之django+vue.js幼儿园网站系统

开发语言&#xff1a;Python 框架&#xff1a;django Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 采用了Windows10操作系统平台&#xff0c;使用HTMLCSSJS前端模板django作为后台监控&#xff0…

大数据Doris(九):Apache Doris 简单使用

文章目录 Apache Doris 简单使用 一、用户创建 二、创建数据库 三、账户赋权 四、创建数据表 1、创建数据表 2、准备数据 3、导入数据 五、查询数据表 Apache Doris 简单使用 下面按照官网给出的示例简单操作Doris&#xff0c;首先创建用户、创建数据库、赋权、创建表…

第二弹进阶吴恩达 ChatGPT Prompt 技巧

第一弹笔记在这里&#xff1a; 总结吴恩达 ChatGPT Prompt 免费课程 今天分享第二弹&#xff0c;进阶篇。 第一点&#xff0c;任务序列化。 通常看完一篇长文&#xff0c;脑子里往往充满无数疑问。急切想知道所有答案&#xff0c;必须列一个问题清单。对话式问法&#xff0c;对…

ChatGPT:数字时代革新与展望

ChatGPT&#xff1a;数字时代革新与展望 AGI 未来的愿景&#xff1a;建安全有益的 AGI OpenAI团队对AGI的展望&#xff1a; 我们希望 AGI 能够赋予人类在宇宙中最大程度地繁荣发展的能力。我们不期望未来是一个不合格的乌托邦&#xff0c;但我们希望将好的最大化&#xff0c;将…

vue使用路由的query配置项时如何清除地址栏的参数

写vue项目时&#xff0c;如果想通过路由的query配置项把参数从一个组件传到另一个组件&#xff0c;但是又不希望?idxxx显示在地址栏&#xff08;如&#xff1a;http://localhost:8080/test?idxxx的?idxxx&#xff09;&#xff0c;该怎么做&#xff1a; 举一个案例&#xff1…

【Python】【进阶篇】18、Django初始化项目环境精讲

目录 18、Django初始化项目环境精讲1. 完成数据库迁移2. PyMySQL模块的使用3. migrate与makemigrations命令详解1) makegrations生成数据库迁移文件2) migrate执行数据库迁移命令3) 完成数据库迁移总结 18、Django初始化项目环境精讲 上一节中&#xff0c;我们完成了对 settin…

软件工程导论 - 了解黑盒测试

前言 本篇介绍用例的基本要素&#xff0c;熟悉黑盒测试的7种设计测试用例的方法&#xff0c;了解等价类&#xff0c;边界值&#xff0c;判定表&#xff0c;正交表&#xff0c;场景设计&#xff0c;错误猜测法&#xff1b;如有错误&#xff0c;请在评论区指正&#xff0c;让我们…

使用docker部署prometheus最新版本2.43.0

环境准备&#xff1a; 192.168.197.136 安装prometheus 192.168.197.137 安装grafana 先把需要用到的镜像拉取下来 docker pull prom/prometheus 136服务器拉取 当前最新版本2.43.0 在部署prometheus之前先运行一个容器&#xff0c;把需要挂载的目录文件拷贝出来 docker…

[230501] 4月29日考试真题第一篇|Temporary Pools

题目来源&#xff1a;http://t.csdn.cn/goCDT 正确率&#xff1a;6/10 目录​​​​​​​ Temporary Pools 题目 Temporary Pools Paragraph 1: Temporary pools are freshwater habitats that retain water for only three to four months of the year or even shorter pe…

如何在CentOS上详细安装PageOffice进行企业文档管理和协作

PageOffice是一款针对企业文档管理和协作的办公软件&#xff0c;使用它可以轻松创建和编辑办公文档&#xff0c;并协作共享给其他用户。在CentOS上安装PageOffice可以提高企业的工作效率和文档管理水平。本文将详细介绍在CentOS上安装PageOffice的步骤和注意事项。 一、安装Ja…

【Unity-UGUI控件全面解析】| RawImage 显示纹理组件详解

🎬【Unity-UGUI控件全面解析】| RawImage 显示纹理组件详解一、组件介绍二、组件属性面板三、代码操作组件四、组件常用方法示例4.1 相机映射,可充当小地图4.2 播放视频💯总结🎬 博客主页:https://xiaoy.blog.csdn.net 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN�…

LDAP概念和原理介绍

LDAP概念和原理介绍 相信对于许多的朋友来说&#xff0c;可能听说过LDAP&#xff0c;但是实际中对LDAP的了解和具体的原理可能还比较模糊&#xff0c;今天就从“什么是LDAP”、“LDAP的主要产品”、“LDAP的基本模型”、“LDAP的使用案例”四个方面来做一个介绍。 我们在开始…

c#笔记-变量

变量 在编写程序时&#xff0c;我们不能直接预测运行时所有的可能性。 例如在登录时的用户名和密码&#xff0c;有无数种组合。我们无法写出所有可能的值。 变量可以动态地表示一个值。 定义变量 使用var 标识符&#xff0c;并立刻赋值&#xff0c;可以声明一个变量。 var…

倾斜摄影三维模型OSGB格式转换OBJ格式的主要技术方法

倾斜摄影三维模型OSGB格式转换OBJ格式的主要技术方法 将倾斜摄影所获得的三维模型从OSGB格式转换为OBJ格式&#xff0c;可以实现更加灵活和便捷的数据应用和管理。主要技术方法如下&#xff1a; 1、使用转换工具 目前市面上有许多三维模型格式转换工具&#xff0c;比如K3DMak…

辨析 项目范围核查、WBS核查

项目范围核查、WBS核查辨析 项目范围核查 项目目标是否完善和准确指标是否可靠和有效约束和限制条件是否真实和符合实际重要假设前提是否合理风险是否可以接受成功把握是否很大范围定义是否能够保证上述目标的实现范围能够给出的效益是否高于成本范围定义是否需要进一步进行辅…

Python+vue企业员工高校学生体检服务预约系统PyCharm+django

开发语言&#xff1a;Python 框架&#xff1a;django Python版本&#xff1a;python3.7.7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat 开发软件&#xff1a;PyCharm 功能介绍 通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c…

五子棋游戏程序创作过程(C语言)

五子棋游戏程序创作过程&#xff08;C语言 &#xff09; 我是编程爱好者&#xff0c;对游戏程序编制很感兴趣。学习VB6语言时就编制过一些游戏程序&#xff0c;如独立钻石棋、伤脑筋十二块、连连看、扑克牌游戏等&#xff0c;都是windows标准图形界面的。感到很好玩&#xff0…