插入排序
直接插入排序
直接插⼊排序是⼀种简单的插⼊排序法,其基本思想是:把待排序的记录按其关键码值的⼤⼩逐个插 ⼊到⼀个已经排好序的有序序列中,直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。
例如:我们玩扑克牌时,就⽤了插⼊排序的思想
当插⼊第 i(i>=1) 个元素时,前⾯的 array[0],array[1],…,array[i-1] 已经排好序,此时 array[i] 的排序码与 即将 array[i-1],array[i-2],… 的排序码顺序进⾏⽐较,找到插⼊位置 array[i] 插⼊,原来位置上的元素顺序后移
例:将下面数字升序排列
首先,选择第一个元素10,此时只有一个元素,默认已排好序,当插入第二个元素9时,比较9与10,10>9,因此,10后移至第二个元素处,9插入第一个元素处,完成后如下图
我们令end为前面已排好序的序列中最后一个位置,tem为将要插入的元素
以上图为例,end为4,tem为5,设上图序列为数组a,a[end]>tem,则有a[end+1]==a[end],a[end]=tem,end--
继续上述操作直至end<0,tem元素插入完成
最后一次插入如下
代码实现如下
void DirectInsertSort(int* arr, int n)
{for (int i = 0; i < n - 1; i++){int end = i, tem = arr[end + 1]; while (end >= 0){if (arr[end] > tem){arr[end + 1] = arr[end];arr[end] = tem;}else{break; } //若不用交换,则直接进入下一次for循环end--;}}
}
直接插⼊排序时间复杂度为O(n^2)
降序排列为升序时,时间复杂度为O(n^2)
序列大致为升序时,时间复杂度将近为O(n)
直接插⼊排序的特性总结
1.元素集合越接近有序,直接插⼊排序算法的时间效率越⾼
2.时间复杂度:O(N^2)
3.空间复杂度:O(1)
希尔排序
希尔排序法⼜称缩⼩增量法。希尔排序法的基本思想是:先选定⼀个整数(通常是gap=n/3+1),把 待排序⽂件所有记录分成各组,所有的距离相等的记录分在同⼀组内,并对每⼀组内的记录进⾏排 序,然后gap=gap/3+1得到下⼀个整数,再将数组分成各组,进⾏插⼊排序,当gap=1时,就相当于 直接插⼊排序。 它是在直接插⼊排序算法的基础上进⾏改进⽽来的,综合来说它的效率肯定是要⾼于直接插⼊排序算 法的
因为end=end+/-gap,tem=a[end+gap],所以排序到最后时,end==n-gap
为什么gap=gap/3+1,因为
代码如下
void ShellSort(int* arr, int n)
{int gap = n;while (gap > 1){gap = gap / 3 + 1;for (int i = 0; i < n - gap; i++){int end = i, tem = arr[end + gap];while (end >= 0){if (arr[end] > tem){arr[end + gap] = arr[end];arr[end] = tem;}elsebreak;end-=gap;}}}
}
希 尔排序的特性总结
1. 希尔排序是对直接插⼊排序的优化。
2. 当 gap > 1 时都是预排序,⽬的是让数组更接近于有序。当 gap == 1 时,数组已经接近有序的了,这样就会很快。这样整体⽽⾔,可以达到优化的效果
希尔排序时间复杂度不好计算,因为 gap 的取值很多,导致很难去计算,因此很多书中给出的希尔排 序的时间复杂度都不固定。《数据结构(C语⾔版)》---严蔚敏书中给出的时间复杂度为:
相关文章:
插入排序
直接插入排序 直接插⼊排序是⼀种简单的插⼊排序法,其基本思想是:把待排序的记录按其关键码值的⼤⼩逐个插 ⼊到⼀个已经排好序的有序序列中,直到所有的记录插⼊完为⽌,得到⼀个新的有序序列。 例如:我们玩扑克牌时&…...
2025最新 Docker 国内可用镜像源仓库地址(01月02日更新)
1. 添加docker镜像地址 使用编辑器打开配置文件 /etc/docker/daemon.json(如果没有该文件,可以新建一个) 2. vi daemon.json, 写入以下内容 {"builder": {"gc": {"defaultKeepStorage": "20GB",&…...
Java 反射与动态代理:实践中的应用与陷阱
Java 反射与动态代理:实践中的应用与陷阱 在现代Java应用中,反射和动态代理提供了强大的灵活性,但它们也带来了性能和复杂度上的挑战。本文将深入探讨这些技术在实际项目中的应用,分析它们可能导致的陷阱,并提供详细的…...
tp8读取mysql导出excel
环境:php8.3, thinkphp8.0, mysql8.0 use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; use PhpOffice\PhpSpreadsheet\Style\Alignment; use think\facade\Db; use think\response\Json;class Index {public function index…...
【自己动手开发Webpack插件:开启前端构建工具的个性化定制之旅】
在前端开发的世界里,Webpack无疑是构建工具中的“明星”。它强大的功能可以帮助我们高效地打包和管理前端资源。然而,有时候默认的Webpack功能可能无法完全满足我们的特定需求,这时候就需要自定义Webpack插件来大展身手啦!今天&am…...
vue2使用flv.js在浏览器打开flv格式视频
组件地址:GitHub - bilibili/flv.js: HTML5 FLV Player flv.js 仅支持 H.264 和 AAC/MP3 编码的 FLV 文件。如果视频文件使用了其他编码格式就打不开。 flv.vue <template><div><el-dialog :visible.sync"innerVisibleFlv" :close-on-pre…...
Spring中的事务管理器TransactionManager
目录 一、主要功能 二、使用场景说明 在Spring框架中,事务管理器(TransactionManager)是用于管理事务的重要接口。它提供了对事务的全面控制,包括事务的状态管理和资源管理等功能。本文将详细介绍TransactionManager的主要功能、…...
MacOS安装Docker battery-historian
文章目录 需求安装battery-historian实测配置国内源相关文章 需求 分析Android电池耗电情况、唤醒、doze状态等都要用battery-historian, 在 MacOS 上安装 battery-historian,可以使用 Docker 进行安装runcare/battery-historian:latest。装完不需要做任…...
Charles 4.6.7 浏览器网络调试指南:HTTPS抓包(三)
概述 在现代互联网应用中,网络请求和响应是服务交互的核心。对于开发者和测试人员来说,能够准确捕获并分析这些请求,是保证系统稳定性和性能的关键。Charles作为一个强大的网络调试工具,不仅可以捕获普通的HTTP请求,还…...
c++解决常见内存泄漏问题——智能指针的使用及其原理
目录 前言: 1. 智能指针的使用及其原理 1. 1 智能指针的使用场景分析 1.2 RAII和智能指针的设计思路 1.3 C标准库智能指针的使用 1.3 1 auto_ptr 1.3 2 unique_ptr 1.3 3 shared_ptr(重) 1.3 4 weak_ptr 1.3 5 模拟实现删除器 2.智能指针的原…...
算法竞赛之离散化技巧 python
目录 离散化实战演练总结 离散化 不改变数据相对大小的情况下,对数据进行相应的下标映射,即离散化。 例如:【100,200,300,400,500】,离散化后为【1,2,3,4,5】 什么时候可以离散化:当数据只与它们之间的相对大小有关&a…...
1.CSS的三大特性
css有三个非常重要的三个特性:层叠性、继承性、优先级 1.1 层叠性 想通选择器给设置想听的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要是解决样式冲突的问题。 <!DOCTYPE html> <html lang"en&…...
由于请求的竞态问题,前端仔喜提了一个bug
在平常的开发过程中,你可能会遇到这样一个bug。 测试:我在测一个输入框搜索的功能时,告诉你通过输入框输入的内容,和最终通过输入内容搜索出来的结果对不上。 前端:我是通过调用后端接口拿到的数据,这明显…...
HTML `<head>` 元素详解
在 HTML 文档中,<head> 元素是一个非常重要的部分,它包含了文档的元数据(metadata)和其他与文档相关的信息。虽然 <head> 中的内容不会直接显示在网页上,但它对网页的行为、样式和搜索引擎优化(…...
基于RAG构建Text2SQL的实战教程
大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...
GPT-4对话模型在客服中的应用与前景:开启智能客服新时代
GPT-4对话模型在客服中的应用与前景:开启智能客服新时代 随着人工智能技术的迅猛发展,基于深度学习的对话模型在各个领域中得到了广泛应用。其中,GPT-4对话模型在客服系统中的应用尤为引人注目。本文将探讨GPT-4在客服中的应用与未来发展前景,并结合具体代码示例进行说明。…...
我想通过python语言,学习数据结构和算法该如何入手?
学习数据结构和算法是编程中的重要基础,Python 是一个非常适合入门的语言。以下是学习数据结构和算法的步骤和建议: 1. 掌握 Python 基础 确保你对 Python 的基本语法、数据类型、控制结构(如循环、条件语句)、函数等有扎实的理…...
Java多线程的面试面试题及答案解析
什么是进程?什么是线程?有什么区别? 进程是系统资源分配的基本单位,拥有独立的地址空间。线程是 CPU 调度和分派的基本单位,是比进程更小的独立执行的单位,共享所在进程的内存空间等资源。一个进程可以包含…...
python flask中使用or查询和and查询,还有同时使用or、and的情况
在 Flask 中处理数据库查询时,通常会结合使用 ORM 工具,例如 SQLAlchemy。以下是 or 查询、and 查询以及两者同时使用的示例。 文章目录 基础准备1. 使用 or_ 查询2. 使用 and_ 查询3. 同时使用 or_ 和 and_4. 更加复杂的嵌套查询 基础准备 假设有一个…...
C# 解析视频流播放全解析
在多媒体技术日益发达的今天,视频流播放已经成为众多应用中不可或缺的功能。对于开发者而言,掌握如何使用编程语言来解析和播放视频流是一项重要的技能。本文将深入探讨如何使用 C# 来实现视频流的解析与播放。 一、视频流播放原理简介 视频流是将视频…...
关于为什么java中nextInt()和nextLine()不能混用 | nextInt()和nextInt()之类的可以一起用
键盘录入的区别: 第一套体系:遇到空格、制表符、回车都结束,并且都不接收 nextInt()、nextDouble()、next() 遇到空格、制表符、回车就结束,只接收其之前的数据,空格以及空格之后的数据都在缓冲区内,如果…...
计算机图形学:实验一 OpenGL基本绘制
1.OpenGL的环境配置: 集成开发环境Visual Studio Community 2019的安装: 在Windows一栏选择使用C的桌面开发;再转到“单个组件”界面,在“编译器、生成工具和运行时”一栏选择用于“Windows的C CMake工具”;然后转到…...
Node.js 到底是什么
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 编写服务器端代码。 一、主要特点 1. 事件驱动和非阻塞 I/O 模型 Node.js 采用事件驱动架构,通过回调函数处理 I/O 操作,这使得它在处理大量并发请…...
2022年全国职业院校技能大赛网络系统管理赛项模块A:网络构建(样题5)
目录 任务描述 任务清单 (一)基础配置 (二)有线网络配置 (三)无线网络配置 (四)出口网络配置 附录1:拓扑图 附录2:地址规划表 任务描述 随着业务的发展,现在要对海琼银行进行全网改造,为其它区域的网络提供高效的保障服务。同时,海琼银行还针对各个分支行、网点的…...
智慧脚下生根,智能井盖监测终端引领城市安全新革命
在繁忙的都市生活中,我们往往只关注地面的繁华与喧嚣,却忽略了隐藏在地面之下的基础设施——井盖。这些看似不起眼的井盖,实则承担着排水、通讯、电力等重要功能,是城市安全运转的重要一环。然而,传统的井盖管理面临着…...
ES6 简单练习笔记--变量申明
一、ES5 变量定义 1.在全局作用域中 this 其实就是window对象 <script>console.log(window this) </script>输出结果: true 2.在全局作用域中用var定义一个变量其实就相当于在window上定义了一个属性 例如: var name "孙悟空" 其实就相当于执行了 win…...
MsfVenom木马制作及使用
msfvenom基本用法 1、功能介绍 msfvenom的功能:常用于生成木马,在目标机器执行,在本地机器kali中上线,与反弹shell类似。MsfVenom可以生成两种类型的攻击载荷: (1)Payload:Payloa…...
ChromeOS 132 版本更新
ChromeOS 132 版本更新 1. 企业定制化 Chrome Web Store 管理员现在可以使用新设置定制 Chrome Web Store 以适应他们管理的用户,包括以下功能: 添加公司标志添加首页横幅和自定义公告策划扩展集合实施基于类别的控制 这些设置可以通过管理员控制台进…...
MySQL(表空间)
开始前先打开此图配合食用 MySQL表空间| ProcessOn免费在线作图,在线流程图,在线思维导图 InnoDB 空间文件中的页面管理 后面也会持续更新,学到新东西会在其中补充。 建议按顺序食用,欢迎批评或者交流! 缺什么东西欢迎评论!我都…...
智能化加速标准和协议的更新并推动验证IP(VIP)在芯片设计中的更广泛应用
作者:Karthik Gopal, SmartDV Technologies亚洲区总经理 智权半导体科技(厦门)有限公司总经理 随着AI技术向边缘和端侧设备广泛渗透,芯片设计师不仅需要考虑在其设计中引入加速器,也在考虑采用速度更快和带宽更高的总…...
Chrome远程桌面无法连接怎么解决?
Chrome远程桌面连接已停止工作 Chrome远程桌面是一款极为便捷的浏览器插件,能够帮助用户将自己的计算机连接到其他设备,无论是手机、平板电脑还是其他电脑。然而,在实际使用中,许多用户可能会面临各种各样的问题,比如…...
springcloud alibaba 五大组件
Spring Cloud Alibaba是Spring Cloud的一个子项目,致力于为构建分布式应用提供一站式解决方案。它基于阿里巴巴的底层Java开源框架,主要包含以下五大核心组件: 1. Nacos(服务注册与配置中心) 功能:Nacos提…...
es 3期 第25节-运用Rollup减少数据存储
#### 1.Elasticsearch是数据库,不是普通的Java应用程序,传统数据库需要的硬件资源同样需要,提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库,不是关系型数据库,不具备严格的ACID事务特性ÿ…...
理解深度学习pytorch框架中的线性层
文章目录 1. 数学角度: y W x b \displaystyle y W\,x b yWxb示例 2. 编程实现角度: y x W T b \displaystyle y x\,W^T b yxWTb3. 常见错误与易混点解析4. 小结参考链接 在神经网络或机器学习的线性层(Linear Layer / Fully Connect…...
“上门按摩” 小程序开发项目:基于 SOP 的全流程管理
在竞争激烈的生活服务市场,“上门按摩” 服务需求日益增长。为满足这一需求,我们启动了 O2O 模式的 “上门按摩” 小程序开发项目,该项目涵盖客户端、系统管理端、技师端。以下将通过各类 SOP 对项目进行全面管理,确保项目顺利推进。 一、项目启动 SOP:5W2H 分析法 What(…...
【xcode 16.2】升级xcode后mac端flutter版的sentry报错
sentry_flutter 7.11.0 报错 3 errors in SentryCrashMonitor_CPPException with the errors No type named terminate_handler in namespace std (line 60) and No member named set_terminate in namespace std 替换sentry_flutter版本为: 8.3.0 从而保证oc的…...
Unity自学之旅05
Unity自学之旅05 Unity学习之旅⑤📝 AI基础与敌人行为🥊 AI导航理论知识(基础)开始实践 🎃 敌人游戏机制追踪玩家攻击玩家子弹碰撞完善游戏失败条件 🤗 总结归纳 Unity学习之旅⑤ 📝 AI基础与敌…...
LINUX下设置分离状态(Detached State)和未设置分离状态的主要区别在于线程资源的管理方式和线程的生命周期。以下是两种状态的对比:
1. 设置分离状态(Detached State) 资源管理: 线程终止时,系统会自动释放与线程相关的所有资源(如线程栈、线程控制块)。不需要其他线程显式回收(pthread_join)。 线程生命周期&…...
软考信安26~大数据安全需求分析与安全保护工程
1、大数据安全威胁与需求分析 1.1、大数据相关概念发展 大数据是指非传统的数据处理工具的数据集,具有海量的数据规模、快速的数据流转、多样的数据类型和价值密度低等特征。 大数据的种类和来源非常多,包括结构化、半结构化和非结构化数据。 1.2、大数据安全威胁分析 (…...
Alibaba Spring Cloud 一 核心组件、特性
Alibaba Spring Cloud 是 Alibaba 基于 Spring Cloud 的分布式微服务解决方案,提供了一套高性能、高可靠的微服务开发和运维工具。它扩展了 Spring Cloud 的功能,并优化了许多在生产环境中的实践场景,例如服务发现、配置管理、熔断限流等。 …...
通过脚本申请免费SSL证书(泛解析SSL证书)
参考来源 1.https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E 2.https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode 3.https://github.com/acmesh-official/acme.sh/wiki/dnsapi 安装 acme.sh 配置账号 配置默认CA 安装依赖 # Cento…...
基于相机内参推导的透视投影矩阵
基于相机内参推导透视投影矩阵(splatam): M c a m [ 2 ⋅ f x w 0.0 ( w − 2 ⋅ c x ) w 0.0 0.0 2 ⋅ f y h ( h − 2 ⋅ c y ) h 0.0 0 0 f a r n e a r n e a r − f a r 2 f a r ⋅ n e a r n e a r − f a r 0.0 0.0 − 1.0 0.0 ] M_…...
代码随想录算法训练营day34
代码随想录算法训练营 —day34 文章目录 代码随想录算法训练营前言一、62.不同路径动态规划动态规划空间优化 二、63. 不同路径 II动态规划动态规划优化空间版 三、343. 整数拆分动态规划贪心算法 96.不同的二叉搜索树总结 前言 今天是算法营的第34天,希望自己能够…...
Orgill EDI需求分析
Orgill 是一家位于美国的家族企业,主要为五金零售商、建材供应商及相关行业提供全面的分销服务和支持,覆盖范围遍及全球。 EDI需求分析 EDI全称Electronic Data Interchange,中文名称是电子数据交换,也被称为“无纸化贸易”。EDI…...
好用的js工具类
格式化相关 // 数字每三位增加一个逗号 function toThousands(num) {if (num) {return num.toString().replace(/\d/, function(n) {// 先提取整数部分return n.replace(/(\d)(?(\d{3})$)/g, function($1) {return $1 ,})})} else {return 0} }//输出10,000 toThousands(10…...
C++ —— 基于范围的 for 循环
C —— 基于范围的 for 循环 语法push_back() 与 emplace_back() 的区别**emplace_back()** 示例代码如下:**push_back()** 示例代码如下: 容器中的元素是结构体和类 语法 C11中引入了基于范围的for循环,语法如下: for (迭代的变…...
15-spring整合mybatis方式一
spring整合mybatis 方式一【重要】 步骤: 1.导入相关jar包 junit mybatis mysql数据库 spring相关的 aop织入 mybatis-spring 【new】 junit junit 4.12 mysql mysql-connector-java 8.0.23 org.mybatis mybatis 3.5.2 org.springframework spring-webmvc 5…...
数据结构:二叉树—面试题(一)
目录 1、相同的树 2、另一棵树的子树 3、翻转二叉树 4、平衡二叉树 5、对称二叉树 6、二叉树遍历 7、二叉树的分层遍历 1、相同的树 习题链接https://leetcode.cn/problems/same-tree/description/https://leetcode.cn/problems/same-tree/description/ 描述:…...
GPU算力平台|在GPU算力平台部署可图大模型Kolors的应用实战教程
文章目录 一、GPU算力服务平台GPU算力服务平台的概述 二、平台账号注册流程可图大模型Kolors的应用实战教程可图大模型的介绍可图大模型的应用场景可图大模型Kolors的部署步骤 一、GPU算力服务平台 GPU算力服务平台的概述 蓝耘GPU算力平台专为高性能计算设计,广泛…...
Linux探秘坊-------4.进度条小程序
1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后,会 先停顿两秒,再打印出hello bite,但是明明打印在sleep前面,为什么会后打印呢? 因为ÿ…...