有序的一维数组中插入一个整数并保持其有序性

在C语言中,如果你想在一个有序的一维数组中插入一个整数并保持其有序性,你可以使用指针来操作数组元素。这里有一个基本的步骤和示例代码来展示这个过程:

定义一个足够大的数组(比原数组多一个位置来存放新元素)
初始化原数组,并确保它是一个升序数组。
输入你想要插入的整数。
使用指针遍历数组,找到新元素应该插入的位置。
将新元素插入到该位置,并移动后续的元素以保持有序性。

下面是一个示例代码:

在C语言中,要在已排序的一维数组中插入一个整数并保持数组的有序性,你需要首先找到插入点的位置(即该整数应该插入的位置),然后将该位置及其后的所有元素向后移动一个位置,以便为新元素腾出空间。最后,将新元素插入到正确的位置。

以8位数的数组为例子。

下面是一个C语言程序示例,它演示了如何完成这个任务:

第一种方法

#include <stdio.h>
#include <stdlib.h>
// 函数声明
void insertIntoSortedArray(int *arr, int *size, int num);int main() {int arr[9] = {1, 3, 5, 7, 9, 11, 13, 15}; // 初始数组大小为8,但我们预留一个位置用于插入int size = 8; // 数组当前元素个数int num; // 要插入的整数// 输入要插入的整数printf("请输入一个整数以插入到有序数组中: ");scanf("%d", &num);// 插入整数到数组中insertIntoSortedArray(arr, &size, num);// 打印插入后的数组printf("插入后的数组为: ");for (int i = 0; i < size + 1; i++) { // 数组大小加1,因为我们插入了一个元素printf("%d ", arr[i]);}printf("\n");return 0;
}void insertIntoSortedArray(int *arr, int *size, int num) {// 找到插入点的位置int i;for (i = *size; i >= 0 && arr[i - 1] > num; i--) {arr[i] = arr[i - 1]; // 将元素向后移动一个位置}arr[i] = num; // 插入新元素(*size)++; // 更新数组大小
}

注意几个关键点:

我们定义了一个arr数组,大小为9,但初始时只存储了8个元素。这是为了插入新元素时不需要重新分配内存。
insertIntoSortedArray函数接受一个指向数组的指针arr,一个指向当前数组大小的指针size,以及要插入的整数num。
在insertIntoSortedArray函数中,我们通过一个循环找到新元素应该插入的位置,并将该位置及其后的所有元素向后移动一个位置。
在循环结束后,我们在正确的位置插入新元素,并通过增加*size来更新数组的大小。
在main函数中,我们调用insertIntoSortedArray函数来插入整数,并打印插入后的数组。

编译并运行这个程序,你将能够输入一个整数,并将其插入到有序数组中。

第二种方法

#include<stdio.h>
int main()
{
int arr3[9] = { 1,5,8,12,14,19,25,30 };//有序数组
//int arr3[9]={1,2,3,4,6,7,8,9};
int* p = arr3;
int len = sizeof(arr3) / sizeof(arr3[0]) - 1;
printf("%d\n", len);
int n = 12;//想插入的数
int num = 0;
int cishu = len;
int* ppp = arr3;
while (1)
{if (n >= *p && n <= *(p + 1))//保证插入后还是有序的{int cp = *(p + 1);//插入时定要覆盖一个数,所以把即将要被覆盖的值存一下。*(p + 1) = n;while (cishu - num - 1)//要循环的次数{*(ppp + len) = *(ppp + len - 1);//把大于等于n的数都往后一位。//从最后一位开始向后,防止重叠len--;num++;}*(p + 2) = cp;break;}p++;num++;
}
for (int k = 0; k < 9; k++)
{printf("%d ", arr3[k]);//打印
}
return 0;
}

最简单的方法

#include<stdio.h>
#include<string.h>
int main()
{    int arr[9] = { 1,4,7,9,13,15,18,20};//有序初始化int len = 8;int n = 0;scanf("%d",&n); //想插入的数int i = 0;//相当于数组的下标while(1){if (n >= arr[i] && n <= arr[i+1])//保证数组继续有序{//为了把插入的数之后的数往后移动一位。memmove(arr + i+1, arr + i, (len-i)*4);//内存函数,可以重叠arr[i + 1] = n;break;}i++;}//打印for (int k = 0; k < 9; k++){printf("%d ", arr[k]);} return 0;
}

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

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

相关文章

SQL——SELECT相关的题目

目录 197、上升的温度 577、员工奖金 586、订单最多的客户 596、超过5名学生的课 610、判断三角形 620、有趣的电影 181、超过经理收入的员工 1179、重新格式化部门表 1280、学生参加各科测试的次数 1068、产品销售分析I 1075、项目员工I 1084、销售分析III 1327、列出指…

2024最新 Jenkins + Docker 实战教程(六)- Jenkins配置邮箱接收构建通知

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

Spring Cloud 面试题(二)

1. 什么是 Hystrix&#xff1f;它如何实现容错&#xff1f; Hystrix是一个开源的容错库&#xff0c;由Netflix开发&#xff0c;用于分布式系统中的服务间调用&#xff0c;以防止任何单一服务的故障导致整个系统的崩溃。Hystrix通过提供快速失败&#xff08;fail-fast&#xff…

java适配器模式 (Adapter Pattern)示例代码

适配器模式是一种结构型设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。这种模式通常用于系统间接口不兼容的情况下&#xff0c;通过适配器来让它们能够一起工作。下面是一个简单的Java适配器模式示例代码。 目标接口 首先&#xff0c;我们定义了目…

【数据结构】二叉树的功能实现

文章目录 关于二叉树的创建如何创建二叉树实现二叉树的前、中、后序遍历层序遍历 关于二叉树的创建 在笔者的上一篇文章中堆进行了一个详细介绍&#xff0c;而二叉树是以堆为基础进行创建&#xff0c;它与堆的显著不同是 堆像是一个线性结构&#xff0c;堆的结构往往是一个数…

PHP生成二维码+二维码包含logo图片展示

composer require chillerlan/php-qrcode 用到的扩展自己安装&#xff08;注&#xff1a;只生成二维码只要开gd扩展就行&#xff09; 仅生成二维码看这个&#xff1a; use chillerlan\QRCode\QRCode;public function QRCode(){$qrcode new QRCode();$url "http://ww…

Beta 分布和 Gamma 分布

0. 摘要 本文主要介绍 B e t a Beta Beta 分布和 G a m m a Gamma Gamma 分布之间的关系, 以及两者的采样方法. 其实, PyTorch、Numpy、Scipy 等一些机器学习包已经实现了对这两种分布的包装, 本文主要目的是理解背后的大致原理. 1. Beta 分布 设 X ∼ B e t a ( α , β…

Flutter 中的 OutlineButton 小部件:全面指南

Flutter 中的 OutlineButton 小部件&#xff1a;全面指南 在Flutter的Material Design组件库中&#xff0c;OutlineButton是一个用于创建带边框的扁平按钮的小部件。这种按钮通常用于次要操作或在需要强调其他按钮的情况下使用。本文将为您提供一个全面的指南&#xff0c;帮助…

介绍下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块

npm&#xff08;Node Package Manager&#xff09;模块安装机制是Node.js生态系统中非常重要的一部分&#xff0c;它允许开发者轻松管理和安装Node.js项目的依赖项。下面我将详细介绍npm模块的安装机制&#xff0c;以及为什么输入npm install就可以自动安装对应的模块。 npm模…

金蝶「起舞」,AI进化

能清晰感受到的是&#xff0c;金蝶仍然在不断进化&#xff0c;甚至伴随着AI时代的到来&#xff0c;它的进化信号愈发明显。 这些进化对应的具体动作是&#xff0c;把过去多年的服务模型整合成AI模型&#xff0c;把具体的服务“工艺”整理成流程编排能力&#xff0c;以及从740…

水下哨兵 智能守护——北斗人员落水报警与快速应急响应方案

随着科技的不断发展&#xff0c;人们对于安全的需求也越来越高&#xff0c;尤其是在水域活动中&#xff0c;落水事故时有发生&#xff0c;给人们的生命和财产安全带来了很大威胁。为了更好地保障水域活动者的安全&#xff0c;北斗短报文技术被广泛应用于落水报警系统中&#xf…

Python 中的 NumPy:数值计算基础

NumPy&#xff08;Numerical Python&#xff09;是一个用于科学计算的基础包。它提供了支持高效数组和矩阵操作的强大功能&#xff0c;同时还提供了大量的数学函数库。NumPy 是许多数据科学和机器学习库&#xff08;如 Pandas、Scikit-Learn 和 TensorFlow&#xff09;的基础&a…

不平衡数据研究:分配权重 合并2个loader

分配权重&#xff08;基于实例分配&#xff0c;基于类分配&#xff09; import numpy as np import torch from torch.utils.data import DataLoader, WeightedRandomSampler, Dataset# Mock dataset class class MockDataset(Dataset):def __init__(self, data, targets):sel…

玩转OpenHarmony智能家居:如何实现开发版“碰一碰”设备控制

一、简介 “碰一碰”设备控制&#xff0c;依托NFC短距通信协议&#xff0c;通过碰一碰的交互方式&#xff0c;将OpenAtom OpenHarmony&#xff08;简称“OpenHarmony”&#xff09;标准系统设备和全场景设备连接起来&#xff0c;解决了应用与设备之间接续慢、传输难的问题&…

什么是DDoS流量清洗?

随着互联网的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中分布式拒绝服务&#xff08;DDoS&#xff09;攻击尤为引人关注。为了有效应对这一威胁&#xff0c;流量清洗服务应运而生&#xff0c;成为网络安全领域的一项重要技术。 流量清洗服务是一种专门针对DDoS…

昔日辉煌不再,PHP老矣,尚能饭否?

导语 | 近期 TIOBE 最新指数显示&#xff0c;PHP 的流行度降至了历史最低&#xff0c;排在第 17 名&#xff0c;同时&#xff0c;在年度 Stack Overflow 开发者调查报告中&#xff0c;PHP 在开发者中的受欢迎程度已经从之前的约 30% 萎缩至现在的 18%。“PHP 是世界上最好的语言…

WiFi蓝牙模块开发配置过程中需要注意的细节

在很多产品的应用场景中&#xff0c;WIFI网络会给我们提供很多便捷&#xff0c;MCU开发中大多使用串口WIFI蓝牙模块来实现产品接入WIFI网络中。   具体的使用模型如下图所示&#xff1a;整个系统涉及到WIFI网络、手机、服务器平台以及我们设计的产品&#xff0c;一个完整的生…

Docker技术搭建Grafana监控平台

centos7虚拟机和docker的安装&#xff1a;可以参考之前的博文 CPU、mysql-exporter、docker监控模板&#xff1a;百度网盘 提取码&#xff1a;0000 先查看服务器时间是否和当前时间一致&#xff0c;如果不一致&#xff0c;查看对应设置&#xff1a;centos7时间同步博文 一、…

拆分盘投资深度解析:投资逻辑、风险探讨与投资建议

随着互联网技术的飞速发展&#xff0c;金融领域也迎来了诸多创新。其中&#xff0c;拆分盘作为一种新型投资模式&#xff0c;以其独特的“只涨不跌”机制&#xff0c;吸引了众多投资者的目光。本文将深入探讨拆分盘的投资逻辑&#xff0c;并通过一个实际案例进行解析&#xff0…

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 得到的 flag 请包上 flag{} 提交。 密文&#xff1a; 得到一个attachment.zip文件 解题思路&#xff1a; 1、解压attachment.zip&#xff0c;得到222.zip文件。尝试解压需要密码&#xff0c;使用Ziperello爆破密码…