【在一个升序数组中插入一个数仍升序输出】
在一个升序数组中插入一个数仍升序输出
题目举例:
有一个升序数组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…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
02.运算符
目录 什么是运算符 算术运算符 1.基本四则运算符 2.增量运算符 3.自增/自减运算符 关系运算符 逻辑运算符 &&:逻辑与 ||:逻辑或 !:逻辑非 短路求值 位运算符 按位与&: 按位或 | 按位取反~ …...
