有序序列中插入一个整数

news2024/11/20 15:32:08

在这里插入图片描述
思路:
将输入的要插入的数m依次和数组中的元素进行比较。
思:
在排好序的数组中,从右往左比较还是从左往右比较?
其实都可以,但是我觉得从右边(也就是最大的数)依次开始比较,程序比较简单些。
从最大的数也就是数组组下标为n-1的元素比较,若是m<a[n-1],则把这个数“移到”它后面(也就是赋值),m再和数组下标为n-2的元素进行比较,若是m<a[n-2],就把这个数“移到”后面,若此时m≥a[n-2],就把m放在数组下标为n-1的位置上。(前面已经把下标为n-1的元素“移到”后面一位,现在n-1这个位置虽然还存放着最初的初值,此时可以方便理解,理解为“垃圾值”)
而之前的为比较的元素,位置就可以不用移动了。
在这里插入图片描述
例:
对数组元素赋初值之后,“1 4 7 9”
8和9进行比较,8<9,9移到下一位
然后8和7比较,8>7,8就填到7后面的一位。
前面不变,进行输出。
代码实现

#include <stdio.h>
int main (void)
{
	int n,a[50]={0};//n为数组元素的个数,数组初始化为0
	int i; //i 作为计数器
	int m=0;//m 为要插入的数据
	//输入数据
	printf("请输入n的值:\n");
	scanf("%d",&n);
	printf("请输入%d个数(从小到大排列):\n",n);
	for (i=0;i<n;i++)
		scanf("%d",&a[i]);
	printf("请输入要插入的数:\n");
	scanf("%d",&m);
	for (i=n-1;m<a[i];i--)//i赋初值,即数组中的最后一个元素
		a[i+1]=a[i];//若不满足循环的条件,不进入循环体,得到变量i的值
	a[i+1]=m;//将m赋值给第i的下一个元素
	for (i=0;i<n+1;i++)//这时数组为n+1个数
		printf("%-2d",a[i]);
	printf("\n");
	return 0;
}

方法二:
如果得知要插入的数,即m排在第几个就好了。
所以可以先讨论m的下标,
分为:
若m小于序列中最小的数,则m的下标为0;(1)
若m大于序列中最大的数,则m的下标为n;(2)
若m大于序列中第i个数,小于第 i+1个数,则m的下标为i+1;(3)
对于第一种情况,将原来数组中所有的数都往后面移动一位。即a[i+1]=a[i],i从n-1开始,i–
对于第二种情况,直接在原数组的第n个元素重新赋值为m就可以了。
对于第三种情况,在k<=i的元素,原来元素不变,第i+1个元素以及之后的元素,都要往后面移动一个坑,留下一个位置给m。即先a[i+1]=a[i],i从n-1开始,i–,然后给a[i+1]重新赋值为m。
代码实现:

#include <stdio.h>
int main (void)
{
	int n,a[50]={0}; //数组初始化为0
	int i,index,k;
	int m=0;//要插入的数 m初始化为0
	//输入数据
	printf("请输入n的值:\n");
	scanf("%d",&n);
	printf("请输入%d个从大到小排列的数:\n",n);
	for (i=0;i<n;i++)
		scanf("%d",&a[i]);
	printf("请输入要插入的m的值:\n");
	scanf("%d",&m);
	if (m>=a[n-1]) //m大于最大的数
		a[n]=m;
	else if (m<=a[0]) //m小于最小的数
	{
		for (i=n-1;i>=0;i--)
			a[i+1]=a[i];
		a[0]=m;
	}
	else   //m在中间
	{
		for (i=0;i<n;i++)
			if (m>=a[i] && m<a[i+1])
			index=i+1;//得到m的下标,把它赋值给index
		for (k=n-1;k>=index;k--) //对于下标为index之后的元素,都往后面“移动一位”
			a[k+1]=a[k];
		a[index]=m;//留下一个空位,即第index位,插入m
	}
	for (i=0;i<=n;i++)   //输出n+1个元素
		printf("%-2d",a[i]);
	return 0;
}

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

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

相关文章

纯前端JS实现文件上传解析渲染页面

AI真的能代替前端吗&#xff1f; 回答&#xff1a;不会完全代替 能用吗&#xff1f;复制到项目中只会报错 爆红 ……他完全不能理解你需要什么JavaScript&#xff08;简称JS&#xff09;是一种轻量级的脚本语言&#xff0c;主要用于在Web页面上添加交互行为。它由三个不同的…

5月跳槽有风险,不跳也有?

今天讲讲跳槽。 说实话跳槽是为了寻求更好的发展&#xff0c;但在跳槽前我们也不能确定下家就是更好的归宿&#xff0c;这就更加需要我们审慎地去对待&#xff0c;不能盲目跳槽。 其次&#xff0c;我们离职和跳槽&#xff0c;其中的原因很大一部分是目前薪资不符合预期。 那…

基于python+opencv的人脸识别打卡(手把手教你)

基于pythonopencv的人脸识别打卡 1 创建环境2 准备工作2.1新建members.csv文件2.2新建face文件夹2.3注意事项 3 源码4 操作步骤 1 创建环境 conda create -n face python3.7 conda activate face pip install opencv-python pip install pillow pip install opencv-contrib-py…

基于Redis中zset实现延时任务

目录 概要 一、实现原理 适用场景 二、准备工作 三、代码实现 四、zset的优缺点 优点 缺点 概要 本文章主要记录的是使用Redis中的zset实现延时任务&#xff0c;在工作中&#xff0c;像这样的的延时任务是不可避免的&#xff0c;举个栗子&#xff1a;买一张火车票&#…

企业如何利用网络趋势做好线上营销?

随着互联网的不断发展&#xff0c;线上营销越来越成为企业营销的重要组成部分。如何利用网络趋势做好线上营销&#xff0c;已经成为各大企业关注的焦点。本文将为大家介绍如何利用网络趋势做好线上营销的方法和技巧。 一、了解网络趋势 了解网络趋势是做好线上营销的关键。网络…

uboot移植Linux-SD驱动代码解析

一、uboot与linux驱动 1.1、uboot本身是裸机程序 (1)狭义的驱动概念是指&#xff1a;操作系统中用来具体操控硬件的代码叫驱动 广义的驱动概念是指&#xff1a;凡是操控硬件的代码都叫驱动 (2)裸机程序中是直接使用寄存器的物理地址来操控硬件的&#xff0c;操作系统中必须通…

最新版千帆直播网站系统PHP完整版源码(PC+WAP在线观看视频)附安装教程

最新版千帆直播网站PHP完整版源码&#xff0c;PCWAP在线观看视频直播系统 安装方法&#xff1a; 1、导入数据库文件 zhibo.sql 2、修改数据库配置文件 有多处包含UC配置; 根目录&#xff1a;config.inc.php – config.php 其他路径&#xff1a; Conf/config.php Admin/C…

JVM(三):JVM命令与参数

JVM命令与参数 文章目录 JVM命令与参数JVM参数标准参数-X 参数-XX参数其他参数说明常用参数的意义 常用命令jpsjinfojstatjstackjmap 常用工具jconsolejvisualvm内存分析工具 MATGC日志分析工具内存分析工具 MATGC日志分析工具 经过前面的各种分析学习&#xff0c;我们知道了关…

淦,服务器被人传了后门木马。。。

「作者简介」&#xff1a;CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」&#xff1a;对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 今天很暴躁&#xff0c;因为睡眠被打扰了。 一个朋友大半夜打我电话&#xff0c;说她云服…

ThingsBoard 接入摄像头方案

0、上图 废话不多说,先给大家来个效果图: 1、概述 最近,我在群里看到有很多兄弟向我咨询摄像头接入到tb的方案,这个就是找对人了,后续我会截图我当初做的东西,其实这个很简单,而且我这种方法是最好的,下面给大家一一道来。 我总结了下面几种情况,其实关键在于摄像头…

QML画布元素

在早些时候的Qt4中加入QML时&#xff0c;一些开发者讨论如何在QtQuick中绘制一个圆形。类似圆形的问题&#xff0c;一些开发者也对于其它的形状的支持进行了讨论。在QtQuick中没有圆形&#xff0c;只有矩形。在Qt4中&#xff0c;如果你需要一个除了矩形外的形状&#xff0c;你需…

浅谈电力物联网在智能配电系统应用

摘要&#xff1a; 在社会经济和科学技术不断发展中&#xff0c;配电网实现了角色转变&#xff0c;传统的单向供电服务形式已经被双向能流服务形式取代&#xff0c;社会多样化的用电需求也得以有效满足。随着物联网技术的发展&#xff0c;泛在电力物联网开始应用于当今的电力系…

使用【SD-WEBUI】插件生成单张图包含多个人物:分区域的提示词

文章目录 &#xff08;零&#xff09;前言&#xff08;一&#xff09;潜变量成对&#xff08;Latent Couple&#xff09;&#xff08;1.1&#xff09;可自组LoRA&#xff08;Composable LoRA&#xff09; &#xff08;二&#xff09;分区扩散&#xff08;Multi Diffusion&#…

@Configuration(proxyBeanMethods = false) 解析

又是美好的一天呀~ 个人博客地址&#xff1a; huanghong.top 往下看看~ Configuration(proxyBeanMethods false) 解析proxyBeanMethods分析总结 Configuration(proxyBeanMethods false) 解析 最近看一些源码的时候&#xff0c;发现很多Configuration配置类上Configuration(p…

Mysql 学习(九)多表连接原理

连接介绍 为了更加方便的介绍一下连接&#xff0c;我们先创建两个表格 t1 和 t2 CREATE TABLE t1 (m1 int, n1 char(1));CREATE TABLE t2 (m2 int, n2 char(1));INSERT INTO t1 VALUES(1, a), (2, b), (3, c);INSERT INTO t2 VALUES(2, b), (3, c), (4, d);连接的本质是将各个…

GitHub上的AutoGPT神秘的面纱

最近一直在说AutoGPT&#xff0c;有很多的视频介绍&#xff0c;但是本着收藏等于学会的原则&#xff0c;收藏一堆一直没看。 这里用一句话说明白&#xff1a;AutoGPT就是一个用Python套装的壳子&#xff0c;用来更省事的调用OpenAI的API。&#xff08;如果你不明白API&#xf…

WiFi(Wireless Fidelity)基础(二)

目录 一、基本介绍&#xff08;Introduction&#xff09; 二、进化发展&#xff08;Evolution&#xff09; 三、PHY帧&#xff08;&#xff08;PHY Frame &#xff09; 四、MAC帧&#xff08;MAC Frame &#xff09; 五、协议&#xff08;Protocol&#xff09; 六、安全&#x…

ByteBuffer的讲解和使用

1.它其实就是一个数据读取或者写入的一个缓冲区 2.基本的操作步骤&#xff1a; 向buffer写入数据&#xff0c;例如调用channel.read(buffer)调用flip()切换至读模式从buffer读取数据&#xff0c;例如调用buffer.get()调用clear()或者compact()切换至写模式重复以上步骤 3.内部…

企业商务租车为工作提供便利

在当代的忙碌生活中&#xff0c;我们总会遇到各种各样的烦恼。最突出的是企业在商务工作中&#xff0c;常常会因为各种原因而导致耽误时间&#xff0c;如火急火燎的去谈生意&#xff0c;却遇到了堵车的现象&#xff0c;或者车辆出现问题而导致耽误时间&#xff0c;而广州商务租…

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来&#xff0c;由于市场对车辆先进安全功能的需求的增加&#xff0c;汽车超声波传感器市场一直保持稳步增长。ICV估计&#xff0c;车载超声波传感器全球市场预计在2022年至2027年之间以11.5&#xff05;的复合年增长率增长&#xff0c;这种增长是由越来越多的高级驾驶辅助系…