PAT乙级别.1035. 插入与归并(25)

浙大PAT基础题全AC代码包:含MinGW/VC6可执行文件与多IDE项目配置 这个资源包收录浙江大学PAT平台基础级别全部典型题目的完整通过代码,覆盖1005继续(3n+1)猜想、1008数组循环右移、1010一元多项式求导、1028人口普查、1029旧键盘、1030完美数列、1031查验身份证、1032挖掘机技术哪家强、1033旧键盘打字、1034有理数四则运算、1035插入与归并等高频题目。每道题均提供标准C++源码(main.cpp)、已编译的Windows可执行文件(.exe)、目标文件(.o)、Makefile.win工程脚本,以及VC6、Code::Blocks(.cfp 阅读详情

1035. 插入与归并(25)

题目

根据维基百科的定义:

插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。

归并排序进行如下迭代操作:首先将原始序列看成N个只包含1个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下1个有序的序列。

现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?

输入格式

输入在第一行给出正整数N (<=100);随后一行给出原始序列的N个整数;最后一行给出由某排序算法产生的中间序列。这里假设排序的目标序列是升序。数字间以空格分隔。

输出格式

首先在第1行中输出“Insertion Sort”表示插入排序、或“Merge Sort”表示归并排序;然后在第2行中输出用该排序算法再迭代一轮的结果序列。题目保证每组测试的结果是唯一的。数字间以空格分隔,且行末不得有多余空格。

输入样例1

10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0

输出样例1

Insertion Sort
1 2 3 5 7 8 9 4 6 0

输入样例2

10
3 1 2 8 7 5 9 4 0 6
1 3 2 8 5 7 4 9 0 6

输出样例2

Merge Sort
1 2 3 8 4 5 7 9 0 6

PAT链接

思路

搞清楚插入排序与归并排序的实现

代码

/**
* @tag     PAT_B_1035
* @authors R11happy (xushuai100@126.com)
* @date    2016-9-7 14:57-16:00
* @version 1.0
* @Language C++
* @Ranking  740/614
* @function null
*/

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int origin[110],changed[110],temp[110],output[110];

//判断两个序列是否一样
bool equals(int A[], int B[], int len)
{
    for(int i = 0; i<len; i++)
    {
        if(A[i] != B[i])    return false;
    }
    return true;
}

bool insertSort(int A[], int len)
{
    bool flag = false;
    for(int i = 0; i<len; i++)
    {
        temp[i] = A[i];
    }
    //每趟排完,前i个数是有序的
    for(int i = 1; i<len; i++)
    {
        for(int j = i; j>0; j--)    //进行一趟插入排序
        {
            if(temp[j] < temp[j-1])   swap(temp[j], temp[j-1]);
        }
        if(flag == true)
        {
            for(int k = 0; k<len; k++)  output[k] = temp[k];
            return true;
        }
        if(equals(changed, temp, len))   flag = true;
    }
    return false;
}

void merge(int A[], int L1, int R1, int L2, int R2)
{
    int i = L1, j = L2;
    int store[110], index = 0;
    while(i <= R1 && j <= R2)
    {
        if(A[i] < A[j]) store[index++] = A[i++];
        else    store[index++] = A[j++];
    }
    while(i <= R1)  store[index++] = A[i++];
    while(j <= R2)  store[index++] = A[j++];
    for(int k = 0; k < index; k++)
    {
        A[L1+k] = store[k]; //千万注意,这里是A[L1+k]不是A[k]
    }
}

bool mergeSort(int A[], int len)
{
    bool flag = false;
    for(int i = 0; i<len; i++)
    {
        temp[i] = A[i];
    }

    for(int step = 2; step/2 < len; step *= 2)
    {
        for(int i = 0; i<len; i+=step)
        {
            int mid = i + step/2 -1;    //该组左半边最后一个元素
            if(mid + 1 <len)
            {
                merge(temp, i, mid, mid+1, min(len-1, i+step-1));
            }
        }
        if(flag == true)
        {
            for(int k = 0; k<len; k++)  output[k] = temp[k];
            return true;
        }
        if(equals(changed, temp, len))   flag = true;
    }
    return false;
}

int main(int argc, char const *argv[])
{
    int N;
    scanf("%d", &N);
    for(int i = 0; i<N; i++)
    {
        scanf("%d", &origin[i]);
    }
    for(int i = 0; i<N; i++)
    {
        scanf("%d", &changed[i]);
    }
    if(insertSort(origin, N))
    {
        printf("Insertion Sort\n");
        printf("%d", output[0] );
        for(int i = 1; i<N; i++)    printf(" %d",output[i] );
    }
    else if(mergeSort(origin, N))
    {
        printf("Merge Sort\n");
        printf("%d", output[0] );
        for(int i = 1; i<N; i++)    printf(" %d",output[i] );
    }
    else
        printf("Error\n");
    return 0;
}

收获

华为擎云W515 PGUV-WBY0安装银河麒麟V10全流程解析 本文详细解析了华为擎云W515 PGUV-WBY0安装银河麒麟V10系统的全流程,包括准备工作、镜像下载与校验、启动盘制作、BIOS设置、安装过程关键选择、系统初始化及常见问题排查。特别针对ARM架构设备提供了实用技巧,帮助用户顺利完成国产化系统的部署与优化。 阅读详情

相关推荐

汽车软件工程师必看:ASPICE开发流程全解析(附各阶段交付物清单)

本文全面解析了汽车行业广泛采用的ASPICE开发流程,详细介绍了从需求挖掘到系统架构设计、软件工程及测试验证各阶段的关键操作和交付物清单。针对汽车软件工程师,提供了实用的协作指南和工具推荐,帮助团队提升开发效率并降低项目风险,是掌握ASPICE标准的必备指南。

weixin_30733003的博客 643

pat甲级什么水平_PAT甲级带我通关编程与数据结构新手村

写在前面半年前我努力啃下了《算法第4版》,作为非科班的学生,刚学完数据结构与算法,我同样也在思考如何巩固提高。最终我选择了适合自己的几个方式,PAT甲级正是其中之一。大概讲一下PAT甲级是啥。PAT(Programming Ability Test)是浙江大学组织的编程考试,分为乙级、甲级和顶级。浙大计算机学院和软件学院可用甲级、顶级成绩作为考研机试成绩,部分企业可为成绩优异者免除招聘笔试,具体情...

weixin_39740283的博客 4554

实战指南!基于STM32的智能环境监测系统(代码+硬件设计+云端控制)

本文详细介绍了基于STM32的智能环境监测系统的设计与实现,包括硬件选型、电路设计、软件架构和云端控制。系统通过DHT11温湿度传感器和MQ-2烟雾传感器实时监测环境数据,STM32F103C8T6主控芯片处理数据并通过ESP8266上传至中国移动物联网平台,支持手机APP远程监控。项目成本低、稳定性高,适合智能家居和环境监测应用。

weixin_29194817的博客 433

PAT(Programming Ability Test)等级,可以基本对应程序能力

PAT(Programming Ability Test)等级,可以基本对应程序能力

无尽星空--帝王铠 1万+

手把手教你用USBasp给Arduino UNO烧写程序(ICSP模式,含BootLoader选择指南)

本文详细介绍了如何使用USBasp编程器通过ICSP模式为Arduino UNO烧写程序,包括硬件连接、软件配置、Hex文件处理和BootLoader选择指南。内容涵盖从新手入门到高级优化的全流程,帮助开发者高效完成烧写任务,特别适合需要修复BootLoader或进行量产烧写的用户。

weixin_33958381的博客 364

【Ubuntu】SMBus Host controller not enabled(虚拟机进入不了图形界面)

SMBus Host controller not enabled(虚拟机进入不了图形界面)

Cappuccino Blog 4万+

PAT考试经验总结(甲乙级均适用)~~想满分的请看这里!~~

emmmmmmm 总算是考了个满分,不用以后再交PAT考场一日游入场费了T ^T 第一次在去年秋天,被第一题狼人杀给干掉了〒▽〒,最后得了81分,第二次就是今年春季,侥幸满分通过了= = 为了总结自己踩过的坑,给后面要考的同学们提供一些微薄的帮助,遂作此文。 考场经验 一. 注意,考试的运行时的黑框,是不能使用Crtl+V进行粘贴的,但这不代表考试不能进行复制粘贴,PAT考试系统里的代码...

漫浸天空的雨色的备忘录~ 10万+

泛微E9表单建模查询列表勾选后带入流程明细表中

注意:参照下图各项配置,否则会有问题。

泛微二次开发后端知识总结 5309

PAT 考试是什么?

文章目录一、宗旨二、考试方式三、成绩和证书四、大纲要求五、今年的秋季考试注意事项 一、宗旨 浙江大学计算机程序设计能力考试(Programming Ability Test,简称PAT)是由浙江大学计算机科学与技术学院组织的统一考试,旨在培养和展现学生分析问题、解决问题和计算机程序设计的能力,科学评价计算机程序设计人才,并为企业选拔人才提供参考标准。 二、考试方式 由浙江大学计算机科学与技术学院考...

南淮北安的博客 6万+

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1546

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

这一篇文章将采用SD卡作为存储硬件,利用SPI协议与SD卡通信,完成块设备驱动开发测试。 SD卡可以更加形象的表示块设备开发过程,明白硬件如何交互,完成数据读写。

2603

[PAT Basic Level] 1035. 插入与归并

题目分析: 这道题目,花了不少时间,犯了一个很窒息也让我查了很久很才发现的错误——把Insertion Sort输出成了Insert Sort。。。写这道题的分析时,身心俱疲。中途因为查不出错,借鉴了网上的一些代码并相应地修改了,所以和网上很多其他人代码比较相似。 这道题目从0~6一共7个测点,0、2、4是插入排序测点,其余是归并排序测点(看看我的错误想必就能明白为何我知道这些测点的情况了。。) ...

weixin_44452361的博客 224

基于 FastAPI + LangGraph + LLM 大语言模型的通用 Agent 多智能体系统架构设计与开发实战、产业应用

FastAPI是一个现代、快速(高性能)的Python Web框架,专门用于构建API。它由Sebastián Ramírez(@tiangolo)创建,基于Starlette(用于Web部分)和Pydantic(用于数据部分)构建。性能优先:FastAPI是当前最快的Python Web框架之一,性能与NodeJS和Go相当。这得益于其基于Starlette的异步架构,能够充分利用Python 3.6+的async/await特性。开发效率。

AI天才研究院 230

PAT (Basic Level) Practice (中文)1035 插入与归并 (25 分)

1035插入与归并(25分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。 归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。 现给定原始序列和...

菱形继承 321

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PAT (Basic Level) Practice

题号 问题 C/C++ 相关知识点 1001 害死人不偿命的(3n+1)猜想 参考题解 模拟 1002 写出这个数  参考题解 字符串处理 1003 我要通过! 参考题解 数学题 1004 成绩排名  参考题解 查找元素 1005 继续(3n+1)猜想  参考题解 Has...

追風少年 767

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【PAT乙级题库】全套总结

我将难度分为三个等级: 简单 中等 难 简单的做一次足以,做再多遍也无任何的意义。 中等的可以多刷几遍 难的多刷几遍 目录1001 害死人不偿命的(3n+1)猜想【简单 做一次足以】1002 写出这个数 (20 分)【简单 做一次足以】1003 我要通过! (20 分)【难 建议多刷】 1001 害死人不偿命的(3n+1)猜想【简单 做一次足以】 1001 害死人不偿命的(3n+1)猜想 1002 写出这个数 (20 分)【简单 做一次足以】 1002 写出这个数 1003 我要通过! (20 分).

辉小歌的博客 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

PAT 乙级题解目录—1001-1095

1001 害死人不偿命的(3n+1)猜想 1002 写出这个数

Arthur的博客 756

PAT basic 练习题 C++ 代码合集及测试点错误解决方法

1001 害死人不偿命的(3n+1)猜想 (15分) 1002 写出这个数 (20分)

雨渊的博客 2455

PAT乙级(考研上机复习 重点题&易错题)

PAT乙级 重点题&易错题

weixin_52355727的博客 1657

PAT刷题经验(1),看此一遍文章就够了!

PAT刷题经验,详细介绍了什么是PAT,刷PAT有什么用,怎么学习刷算法,推荐的书籍,还有一些刷题技巧~

青春无问西东 岁月自成芳华 2万+

如何刷pat(想要在pat甲级拿80到90分)

遇到不会的题或者交N次都过不了某个测试点,先自己尝试着解决,很长时间没有想法(比如一个小时)后,再去网上搜题解。并且不要直接看代码,看下人家的思路。自己再来做,再做不来就去看代码,也不要直接把代码copy下来改了就交,最好看懂代码自己写。我个人觉得这样才能把别人的东西变成自己的。(MOOC数据结构的题有问题的话,善用讨论区,姥姥都会很耐心地提供帮助 另外找个大腿抱还是挺重要的(比你强就行),N天

wuhuagu_wuhuaguo的博客 3万+

个人关于PAT的认识心得和体会

前言 今天考了18年9月份的PAT甲级考试,虽然成绩不理想,但是也给一个阶段划上了句号。有一些心得和反思,写给自己,也希望能帮助他人。     正确认识PAT 首先正确的认识PAT很关键: 如果你是考研的同学,如果成绩优异可以替换掉浙大的计院和软院的研究生复试的机试部分(据说其他的学校也有,这一点我不太清楚,可以针对具体院校咨询一下)。 如果你是工作的同学,成绩特别优异的话还是比较有...

CrazyOnes的博客 1万+

PAT 甲级 汇总

终于把PAT甲级的题目都补齐啦~~~撒花~~~ 臭不要脸的给自己弄了个汇总 23333。 1001. A+B Format解析 http://blog.csdn.net/sheepywyy/article/details/53995044 1002. A+B for Polynomials 解析 http://blog.csdn.net/sheepywyy/a

sheepyWYY的博客 5218

PAT甲级分类【树】

1147 Heaps (30分) 完全二叉树和堆的性质 知识点: 大顶堆:子节点比父节点小,根节点最大 postorder 后序遍历 levelorder 层序遍历 //1147 #include<bits/stdc++.h> using namespace std; int m,n; vector <int> v; void postorder(int index){ if(index>n)return; postorder(index*2); postorder(in

且行的小博客 446

PAT学习 Basic级别

#PAT刷题笔记(1)写在前面C语言的接受数据格式之字符串(1009)先来看一下题目怎么做呢 #PAT刷题笔记(1) 写在前面 一个菜鸡开始刷PAT了,拿了乙级题刷,用的是C语言,感觉很多基本的语法在这里还要熟悉,包括接受和输出数据的格式和相关代码,慢慢学习吧,(虽说不想当个纯码农,但是也许还是得多多少少学些计算机的东西,练练码功了。) C语言的接受数据格式之字符串(1009) 之前做题目做出的都是键入数字,用scanf循环输入即可,现在遇到一个输入为字符串的题目,得从字符串读入开始了。 先来看一下题目 1

wbywby11的博客 941

PAT乙级考试经验分享

主要介绍了PAT乙级考试从报名到准备到考试中的小技巧等相关经验

戴璞微的学习之路 1万+
上一篇: PAT乙级.1030. 完美数列(25)
下一篇: PAT乙级.1040. 有几个PAT(25)
R11happy
博客等级 码龄11年 6粉丝 77原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值