【在一个升序数组中插入一个数仍升序输出】
在一个升序数组中插入一个数仍升序输出
题目举例:
有一个升序数组nums,给一个数字data,将data插入数组nums中仍旧保证nums升序,返回数组中有效元素个数。
比如:nums[100] = {1, 2, 3, 5, 6, 7, 8, 9} size = 8 data = 4
插入之后,nums为{1, 2, 3, 4, 5, 6, 7, 8, 9}
返回 size = 9
方法一:插入排序
1.1方法解析
1.遍历数组nums,找到第一个大于等于data的元素位置index。
2.将index及其之后的元素都往后移动一位,腾出位置给数据。
3.将data插入到index位置。
4.size加1。
1.2函数实现
int insertIntoArray(int nums[], int size, int data) {int i, index;// 找到第一个大于等于data的元素位置for (i = 0; i < size; i++) {if (nums[i] >= data) {index = i;break;}}// 将index及其之后的元素都往后移动一位for (i = size - 1; i >= index; i--) {nums[i + 1] = nums[i];}// 将data插入到index位置nums[index] = data;// size加1size++;
1.3实际代入
void insertIntoArray(int nums[], int size, int data) {int i, index;// 找到第一个大于等于data的元素位置for (i = 0; i < size; i++) {if (nums[i] >= data) {index = i;break;}}// 将index及其之后的元素都往后移动一位for (i = size - 1; i >= index; i--) {nums[i + 1] = nums[i];}// 将data插入到index位置nums[index] = data;// size加1size++;
for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\n");printf("size = %d", size);
}
int main()
{int nums[100] = { 1,2,3,5,6,7,8,9 };int size = 8;printf("插入前:");for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\nsize = %d\n", size);int data = 0;scanf("%d", &data);printf("插入后:");Inserdata(nums, size, data);return 0;}
1.4运行结果举例

方法二 :二分查找插入排序
2.1方法解析
首先,初始化两个指针和分别指向数组的起始和结束位置。然后进行循环,直到大于等于为止。在每一次循环中,计算中间位置,并将中间元素与要插入的值进行比较。leftrightleftrightmid
如果中间元素大于要插入的值,说明要插入的值在左半部分,将指针更新为;
如果中间元素小于要插入的值,说明要插入的值在右半部分,将指针更新为;
如果中间元素等于要插入的值,说明要插入的值已rightmid-1leftmid+1
最终,当大于时,并将要插入的值放入该位置即可。返回数组大小加1。leftright
2.2函数实现
void Inserdata(int nums[], int size, int data) //方法二:二分法查找插入排序
{int left = 0;int right = size - 1;while (left < right){int mid = (left + right) / 2;int midvalue = nums[mid];if (nums[mid] < data)//找到中间数和data对比{left = mid + 1;}else{right = mid - 1;}}for (int i = size - 1; i >= left; i--){nums[i + 1] = nums[i];}nums[left] = data;size++;for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\n");printf("size = %d", size);
}
2.3实际代入
void Inserdata(int nums[], int size, int data) //方法二:二分法查找插入排序
{int left = 0;int right = size - 1;while (left < right){int mid = (left + right) / 2;int midvalue = nums[mid];if (nums[mid] < data){left = mid + 1;}else{right = mid - 1;}}for (int i = size - 1; i >= left; i--){nums[i + 1] = nums[i];}nums[left] = data;size++;for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\n");printf("size = %d", size);
}
int main()
{int nums[100] = { 1,2,3,5,6,7,8,9 };int size = 8;printf("插入前:");for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\nsize = %d\n", size);int data = 0;scanf("%d", &data);printf("插入后:");Inserdata(nums, size, data);return 0;
}
2.4运行结果举例

方法三 依次次对比
3.1方法解析
1.数组为升序
2在数组中找待插入元素的位置,具体找的方式为
3.从后往前依次与数组中元素进行比较,如果要插入元素num比end位置数据小,则num一定插在end位置之前
4.因此将end位置数据往后搬移一个位置
5.如果num大于end位置元素或者end已经在区间最左侧,则位置找到/ 最后将新元素插入到end+1的位置
3.2函数实现
void Inserdata(int nums[], int size, int data) //方法三:依次对比
{int end = size - 1;while (end >= 0 && data < nums[end]){nums[end + 1] = nums[end];end--;}nums[end + 1] = data;// 返回插入之后,数组中有效元素个数size++;for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\n");printf("size = %d", size);
}
3.3实际代入
void Inserdata(int nums[], int size, int data) //方法三:依次对比
{int end = size - 1;while (end >= 0 && data < nums[end]){nums[end + 1] = nums[end];end--;}nums[end + 1] = data;// 返回插入之后,数组中有效元素个数size++;for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\n");printf("size = %d", size);
}
int main()
{int nums[100] = { 1,2,3,5,6,7,8,9 };int size = 8;printf("插入前:");for (int i = 0; i < size; i++){printf("%d ", nums[i]);}printf("\nsize = %d\n", size);int data = 0;scanf("%d", &data);printf("插入后:");Inserdata(nums, size, data);return 0;
}
3.4运行结果举例

相关文章:
【在一个升序数组中插入一个数仍升序输出】
在一个升序数组中插入一个数仍升序输出 题目举例: 有一个升序数组nums,给一个数字data,将data插入数组nums中仍旧保证nums升序,返回数组中有效元素个数。 比如:nums[100] {1, 2, 3, 5, 6, 7, 8, 9} size 8 data 4 …...
图像去雨、去雪、去雾论文学习记录
All_in_One_Bad_Weather_Removal_Using_Architectural_Search 这篇论文发表于CVPR2020,提出一种可以应对多种恶劣天气的去噪模型,可以同时进行去雨、去雪、去雾操作。但该部分代码似乎没有开源。 提出的问题: 当下的模型只能针对一种恶劣天气…...
YARN框架和其工作原理流程介绍
目录 一、YARN简介 二、YARN的由来 三、YARN的基本设计思想 四、YARN 的基本架构 4.1 基本架构图 4.2 基本组件介绍 4.2.1 ResourceManager 4.2.1.1 任务调度器(Resource Scheduler) 4.2.1.2 应用程序管理器(Applications Manager) 4.2.1.3 其他…...
多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测
多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现ZOA-CNN-BiGRU-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.Matlab基于ZOA-CNN-BiGRU-Attention斑马优化卷积双向门控循环单元网络…...
centos上下载redis
1.redis 特点 Redis特性(8个) 1 速度快:10w ops(每秒10w读写),数据存在内存中,c语言实现,单线程模型 2 持久化:rdb和aof 3 多种数据结构: 5大数据结构 …...
黑马项目一阶段面试58题 Web14题(二)
八、内连接和外连接查询有什么区别 内连接 获取两表的交集部分 外连接 获取某表的所有数据,以及两表的交集数据 九、事务管理的作用,四大特性 作用 保证多个增删改的操作,要么同时成功,要么同时失败 四大特性 1.原子性 事…...
软考高项-思维导图34-36(计算机高级系统项目管理师)
陆续更新一些软考高项的思维导图,都是一些必背知识点,希望可以帮助大家早日考过高项,早日当上高工,早日成为杭州E类人才。全部完整导图快速获取链接:计算机高级系统项目管理师-思维导图汇总 三十四、需求按层次分 三十…...
C++的stack和queue+优先队列
文章目录 什么是容器适配器底层逻辑为什么选择deque作为stack和queue的底层默认容器优先队列优先队列的模拟实现stack和queue的模拟实现 什么是容器适配器 适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总 结),…...
Ubuntu 18.04.6 Android Studio Giraffe adb logcat 无法使用
在 Ubuntu 18.04.6 上 在链接上设备以后,发现可以用 Android Studio 安装应用 但无法用 Android Studio 看 logcat 手动从命令行停止,启动 adb 会报错如下: daemon not running. starting it now on port 5037 ADB server didnt ACK fail…...
Python采集天气数据,做可视化分析【附源码】
嗨害大家好鸭!我是小熊猫~ 毕业设计大家着急吗? 没事,我来替大家着急 源码、素材python永久安装包:点击此处跳转文末名片获取 本文知识点: 动态数据抓包 requests发送请求 结构化非结构化数据解析 开发环境: python 3.8 运行代码 pycharm 2…...
优维低代码实践:自定义模板
优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…...
电商3D产品渲染简明教程
3D 渲染让动作电影看起来更酷,让建筑设计变得栩栩如生,现在还可以帮助营销人员推广他们的产品。 从最新的《阿凡达》电影到 Spotify 的上一次营销活动,3D 的应用让一切变得更加美好。 在营销领域,3D 产品渲染可帮助品牌创建产品的…...
探索未来:元宇宙与Web3的无限可能
随着科技的奇迹般发展,互联网已经成为了我们生活的不可分割的一部分。然而,尽管它的便利性和普及性带来了巨大的影响,但我们仍然面临着传统互联网体验的诸多限制。 购物需要不断在实体店与电商平台间切换,教育依然受制于时间与地…...
GraphQL(六)登录态校验Directive
GraphQL Directive(指令)是GraphQL中的一种特殊类型,它允许开发者在GraphQL schema中添加元数据,以控制查询和解析操作的行为 Directive的详细说明及使用可见GraphQL(五)指令[Directive]详解 本文将介绍通过…...
强大的AI语言模型
1.kameAI 点我 1️⃣可以绘图 2️⃣对接4.0 3️⃣具有长篇写作...
成集云 | 鼎捷ERP采购单同步钉钉 | 解决方案
源系统成集云目标系统 方案介绍 鼎捷ERP(Enterprise Resource Planning)是一款综合性的企业管理软件,它包括了多个模块来管理企业的各个方面,其中之一就是采购订单模块。鼎捷ERP的采购订单模块可以帮助企业有效管理和控制采购过程…...
【Kubernetes】Kubernetes的PV和PVC的用法
PV、PVC 前言一、 存储卷1. emptyDir 存储卷1.1 概念1.2 实例 2. hostPath 存储卷2.1 概念2.2 实例 3. nfs共享存储卷 二、PV 和 PVC1. 概念1.1 PV1.2 PVC1.3 PVC 的使用逻辑1.4 创建机制1.5 PV 和 PVC 的生命力周期1.6 创建及销毁 PV 的流程 2. PV 和 PVC 的创建2.1 查看定义2…...
【Redis】Redis三种集群模式-主从、哨兵、集群各自架构的优点和缺点对比
文章目录 前言1. 单机模式2. 主从架构3. 哨兵4. 集群模式总结 前言 如果Redis的读写请求量很大,那么单个实例很有可能承担不了这么大的请求量,如何提高Redis的性能呢?你也许已经想到了,可以部署多个副本节点,业务采用…...
Python爬虫:如何使用Python爬取网站数据
更新:2023-08-13 15:30 想要获取网站的数据?使用Python爬虫是一个绝佳的选择。Python爬虫是通过自动化程序来提取互联网上的信息。本文章将会详细介绍Python爬虫的相关技术。 一、网络协议和请求 在使用Python爬虫之前,我们需要理解网络协…...
剑指offer专题2:队列和栈
用两个栈模拟队列 class CQueue {stack<int> stack1;stack<int> stack2; public:CQueue() {}void appendTail(int value) {stack1.push(value);}int deleteHead() {int val-1;if(!stack2.empty()){val stack2.top();stack2.pop();}else if(!stack1.empty()){while…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
