2021JSP普及组第二题:插入排序

2021JSP普及组第二题
题目:
在这里插入图片描述
思路:
题目要求排序后根据操作进行对应操作。

  • 操作一需要显示某位置数据排序后的位置,所以需要定义结构体数组储存原数据的位置和数据本身
  • 排序后所得数据要根据原位置输出排序后的位置,所以建立一个新的数组,数组下标对应数据原位置,值则为排序后的位置
  • 第一部可以直接sort排序,但是操作后如果都用sort会超时。题干的插入排序不难想到,插入排序即是对已经排好序的数组进行插入操作后排序,一次插入后排序的复杂度为o(2n)
    1. 思路一:可以考虑判断操作的位置前后的数据大小,然后对数组前一段进行修改,或者后一段进行修改。但是由于相同数据还要判断数据原位置的大小,所以考虑的过程相对复杂
    2. 思路二:可以直接判断整个数组的内容,正着遍历和反着遍历(遍历是只能判断相邻两个元素的大小,所以反着再遍历一遍才能保持排序准确),而数据相同需要判断原位置大小(插入排序中,若数据相同,数据排序后的相对位置是不变的)
  • 排序过程是对结构体进行排序,因此排序函数需要指针,而不是简单的形参
//定义结构体用来存储数组值和下标
//排序可以直接用sort
//修改后的数据修直接遍历处理 
#include<bits/stdc++.h>
#include <algorithm> 
using namespace std;
 struct node{
  int n;
  int id;
 }arr[8001]; 
void swap(node *a,node *b);
bool cmp(node a, node b){
 if(a.n!=b.n) return a.n<b.n;//升序排列 
 else return a.id<b.id;
}
int main(){
 int arr_k,k,b[8005];//分别储存数组长度,操作数
 int k1,m,m1,m2;//分别储存操作序号和数据 
 cin>>arr_k>>k;
 for(int i=1;i<=arr_k;i++){
  cin>>arr[i].n;
  arr[i].id=i;
 }
 sort(arr,arr+arr_k+1,cmp);//排序 
 //记录排序后的数据
 for(int i=1;i<=arr_k;i++){
  b[arr[i].id]=i;
 } 
 while(k--){
  cin>>k1;
  if(k1==2){
   cin>>m;
   cout<<b[m]<<endl;
  }else{
   cin>>m1>>m2;
   arr[b[m1]].n=m2;
   arr[b[m1]].id=m1;
   for(int i=1;i<arr_k;i++){ 
    if(cmp(arr[i],arr[i+1])==0){
     swap(&arr[i],&arr[i+1]);
    }
   for(int i=arr_k;i>1;i--){  
    if(cmp(arr[i-1],arr[i])==0){
     swap(&arr[i],&arr[i-1]);
    }
   }
    //更新排序
   for(int i=1;i<=arr_k;i++){
    b[arr[i].id]=i;
   } 
  }
 }
 return 0;
}
void swap(node *a,node *b){
 int t1,t2;
 t1=a->n,t2=a->id;
 a->n=b->n,a->id=b->id;
 b->n=t1,b->id=t2;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

android中调用onnxruntime框架

创建空白项目 安装Android Studio及创建空白项目参考&#xff1a;【安卓Java原生开发学习记录】一、安卓开发环境的搭建与HelloWorld&#xff08;详细图文解释&#xff09;_安卓原生开发-CSDN博客 切记&#xff1a;build configuration language 一定选择Groovy&#xff01;官…

mysql报错 Duplicate entry

在MySQL中&#xff0c;当你尝试执行插入&#xff08;INSERT&#xff09;或更新&#xff08;UPDATE&#xff09;操作时&#xff0c;如果目标表中存在唯一索引&#xff08;包括主键索引、唯一约束索引等&#xff09;&#xff0c;并且你要插入或更新的数据在该索引列上的值与表中已…

电机控制系列模块解析(28)—— 其他功能概述

其他功能概述 软件侧&#xff1a;观测器估计发散保护、时序异常检测 主电路侧&#xff1a;IGBT结温估算、直流母线电容容值估算 电机侧&#xff1a;电机温度估计、轴承异常估计、电机退磁检测 负载侧&#xff1a;负载不平衡检测、掉载检测、负载惯量自适应 上述各项功能&a…

Diffusers代码学习: IP-Adapter Inpainting

IP-Adapter还可以通过Inpainting自动管道和蒙图方式生成目标图片。 # 以下代码为程序运行进行设置&#xff0c;使用Inpainting 的自动管道&#xff0c; import os os.environ["HF_ENDPOINT"] "https://hf-mirror.com"from diffusers import AutoPipelin…

【React】vscode 中 React 自动补齐标签设置

1.打开设置 2.搜索 includeLanguages 3. 在Emmet 下&#xff0c;点击“添加项”&#xff0c;添加一项 javascript --> javascriptreact 4. 重启vs code

学习笔记——路由网络基础——汇总静态路由

4、汇总静态路由 (1)定义 静态路由汇总&#xff1a;多条静态路由都使用相同的送出接口或下一跳 IP 地址。(将多条路由汇总成一条路由表示) (2)目的 1.减少路由条目数量&#xff0c;减小路由表&#xff0c;加快查表速度 2.增加网络稳定性 (3)路由黑洞以及路由环路的产生…

循环语句大揭秘:while、do-while、for、foreach你都掌握了吗?

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一…

idm2024最新完美破解版免费下载 idm绿色直装版注册机免费分享 idm永久激活码工具

IDM 2024破解版重新开发了调度程序和MMS协议支持、重新设计和增强的下载引擎、与所有最新浏览器的独特高级集成、改进的工具栏以及大量其他改进和新功能&#xff0c;这一全新的更新&#xff0c;使得IDM下载器更加完美。值得一提的是&#xff0c;它可以借助油猴浏览器的脚本&…

GAN网络理论和实验(二)

文章目录 一、说明二、什么是生成对抗网络&#xff1f;三、判别模型与生成模型四、生成对抗网络的架构五、你的第一个 GAN六、准备训练数据七、实现鉴别器八、实现生成器九、训练模型十、检查 GAN 生成的样本十一、使用 GAN 生成手写数字十二、准备训练数据十三、实现鉴别器和生…

【机器学习】XGBoost: 强化学习与梯度提升的杰作

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 XGBoost: 强化学习与梯度提升的杰作引言1. XGBoost概览1.1 什么是XGBoost&#…

玄机平台应急响应—apache日志分析

1、前言 apache的日志一共有两个&#xff0c;一个是access.log&#xff0c;这个日志记录了所有对Web服务器的访问&#xff0c;被入侵时重点排查这个。另一个是error.log&#xff0c;错误日志记录了服务器运行期间遇到的各种错误&#xff0c;以及一些普通的诊断信息&#xff0c…

Java——IO流(一)-(1/8):File、IO流概述、File文件对象的创建(介绍、实例演示)

目录 File IO流概述 File文件对象的创建 介绍 实例演示 File 存储数据的方案 变量 double money 9999.5 数组 int[] age new int[100];对象 Student s new Student()集合 List<Student> students new ArrayList<>()…

NIST 电子病历中的疾病列表部分的认证

美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09;对电子病历的认证 分几个阶段&#xff0c;每个阶段又分门诊和住院&#xff0c;然后又分若干模块。下面是疾病列表的测试脚本。 170.302c_Problemlist Test …

Maven中的DependencyManagement和Dependencies

Maven中的DependencyManagement和Dependencies Dependencies Dependencies是Maven项目中用来声明项目依赖的部分。在pom.xml文件中的<dependencies>部分&#xff0c;你可以直接列出项目所依赖的库&#xff08;artifacts&#xff09;。每个依赖通常包括以下信息&#xf…

DevExpress winForm gridView 设置复选框并可多选

OptionsSelection.MultiSelect True OptionsSelection.MultiSelectMode CheckBoxRowSelect

Leetcode3171. 找到按位与最接近 K 的子数组

Every day a Leetcode 题目来源&#xff1a;3171. 找到按位与最接近 K 的子数组 解法1&#xff1a;位运算 优化&#xff1a; 代码&#xff1a; /** lc appleetcode.cn id3171 langcpp** [3171] 找到按位与最接近 K 的子数组*/// lc codestart class Solution { public:int m…

Flink SQL实践

环境准备 方式1&#xff1a;基于Standalone Flink集群的SQL Client 启动Flink集群 [hadoopnode2 ~]$ start-cluster.sh [hadoopnode2 ~]$ sql-client.sh ... 省略若干日志输出... Flink SQL> 方式2&#xff1a;基于Yarn Session Flink集群的SQL Client 启动hadoop集群…

把qml程序制作成安装包(Windows)

先检查一下有没有安装Qt Installer FrameWork 需要用到Qt自带的打包工具&#xff1a; Qt Installer FrameWork&#xff0c;虽然有点拉胯&#xff0c;但是也能用用。一般放在Qt目录下的Tools文件夹下&#xff0c;如果没有看到&#xff0c;就去在线下载器去下载一下。 步骤1 随…

深度学习的舌象诊断:从舌头上了解系统性疾病!

首先 深度学习算法能否解决东方医学中依靠医生经验的诊断问题&#xff1f;而要实现这个目标&#xff0c;需要什么呢&#xff1f; 用舌头诊断被称为口腔健康的指标&#xff0c;但在东方医学中&#xff0c;舌头也被用来评估全身的状况。换句话说&#xff0c;通过分析舌头的图像…

2 程序的灵魂—算法-2.2 简单算法举例-【例 2.3】

【例 2.3】判定 2000 — 2500 年中的每一年是否闰年&#xff0c;将结果输出。 润年的条件: 1. 能被 4 整除&#xff0c;但不能被 100 整除的年份&#xff1b; 2. 能被 100 整除&#xff0c;又能被 400 整除的年份&#xff1b; 设 y 为被检测的年份&#xff0c;则算法可表示如下…