PAT Basic1035(恶心到我了!!!)_patbasic1035_不要绝望总会慢慢变强的博客-程序员秘密

技术标签: PAT basic  

 

1035 插入与归并(25)(25 分)

根据维基百科的定义:

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

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

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

输入格式:

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

输出格式:

首先在第1行中输出“Insertion Sort”表示插入排序、或“MergeSort”表示归并排序;然后在第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

ps:放假期后去沈阳实习,这边天气干燥,刚来不习惯,头晕思维不清晰。。。这道题的的恶心之处在于测试用例中有排序算法迭代几次仍然相同的序列,而这道题说得并不明白,什么叫迭代一次?就算迭代过后序列不变就不是迭代了吗?而且以前写归并排序都是用递归写的,提交得时候才发现用递归写的和用非递归写的迭代序列不一样,真麻烦,考场就GG了!!!

重要的事情说3次,大家在刷题过程中如果真的想不出来可以在牛客网搜这道题,牛客网可以看测试用例!!!!

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int s[110];
int zj[110];
 int N;
void swap1(int &a,int &b){
    int temp;
    temp = a;
    a = b;
    b = temp;
}
bool isSame(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)
{
  int flag=0;
    for (int i = 0; i < len-1; i++)
    {
        int j = i + 1;
        for (int k = i; k >= 0; k--)
        {
            if (a[j] < a[k])
            {
                swap1(a[j], a[k]);
                j = k;
            }
        }
        if(flag==1&&!isSame(a,zj,N)){
        for (int i = 0; i < len; i++)
            {
            printf("%d", a[i]);
            if(i!=len-1)printf(" ");
        }flag=10;return true;
        }
        if(isSame(a,zj,N)&&flag!=1)
        {
        flag=1;printf("Insertion Sort\n");
        }
    }
     return false;
}
bool  mergeSort(int len,int a[])
{
    int flag=0;
    int low,high,mid;
    int size;
    for(size=1;size/2<=len-1;size*=2)
    {
        low=0;
        while(low+size<=len-1)
        {
        mid=low+size-1;
        high=mid+size;
        if(high>len-1)
        high=len-1;
        sort(a+low,a+high+1);
        low=high+1;
        }
        //for (int i = 0; i < len; i++)
        //cout<<a[i]<<" ";cout<<endl;
        if(flag==1&&!isSame(a,zj,N)){
        for (int i = 0; i < len; i++)
            {
            printf("%d", a[i]);
            if(i!=len-1)printf(" ");
        }flag=10;return true;
        }
        if(isSame(a,zj,N)&&flag!=1)
        {
        flag=1;printf("Merge Sort\n");
        }
    }
    return false;
}
int main()
{
    int b[110];
    scanf("%d",&N);
    for(int i=0;i<N;i++)
    {
    scanf("%d",&s[i]);
    b[i]=s[i];
    }
     for(int i=0;i<N;i++)
    {
    scanf("%d",&zj[i]);
    }
    if(insertSort(s,N))int x=0;
    else
    mergeSort(N,b);
    return 0;
}

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/luoshiyong123/article/details/80992063

智能推荐

对象 'dbo.xxx' 不存在,或对此操作无效。为表创建触发器,为什么提示对象不存在?_对象不存在或对此操作无效_CP3圣保罗的博客-程序员秘密

1报错:分析成功,但执行错误,提示:消息 8197,级别 16,状态 4,过程 trg_readerinfo_del,第 1 行对象 ‘dbo.readerinfo’ 不存在,或对此操作无效。表readerinfo是存在的,在管理器那看到dbo.readerinfo是存在的分析:1是否开头加上 use 数据库名 语句 并且 go语句隔开,否则提示2如果go隔开后,仍然失败,查看新建查询语...

基于JavaWeb实现网上图书商城系统_编程指南针的博客-程序员秘密

项目编号:BS-SC-010开发工具:IDEA / ECLIPSE数据库:MYSQL5.7应用服务器:TOMCAT8.5.31JDK: 1.8开发技术:JSP/SERVLET/JDBC前端页面: css+jqueryVx: baozai_7788本项目主要实现了基于JavaWeb开发而成的一套以图书为主打商品的网上花店商城系统。系统功能完整,页面简洁大方,适合做毕业设计或课程设计使用。下面展示一下系统的部分功能:前端页面展示:首页...

黑马程序员--数组_xiongjinqiu的博客-程序员秘密

数组和数组的操作方法一、数组1、数组的概述和定义数组:同一种类型数据的集合。其实数组就是一个容器。数组是存储数据的一种方式好处:容器可以自动给数组中的元素从0开始编号,方便操作这些元素。数组定义的第一种格式:元素类型[] 数组名=new 元素类型[元素个数或数组长度];其中new:用来在内存中产生一个容器实体。其中int代表元素的类型,arr是数

java json 转换_iteye_10251的博客-程序员秘密

Package net.sf.json:[url]http://json-lib.sourceforge.net/apidocs/jdk15/net/sf/json/package-summary.html[/url]JAVA中如何将一个json形式的字符串转为json对象?import net.sf.json.JSONObject;public class test ...

linux 用top命令查看系统健康状态_Cape0915的博客-程序员秘密

我们前面说过了,用ps命令来查看系统所有进程: http://blog.csdn.net/capecape/article/details/78512214这里,本文详细介绍用top命令系查看系统健康状态。top命令格式:[[email protected] ~]#top [选项]#选项: -d 秒数: 指定top命令每隔几秒更新,默认是3秒#在top命令的交互模式当中可以执行的命令: ?

ip_vs实现分析8_香烟头的博客-程序员秘密

本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn: [email protected]来源:http://yfydz.cublog.cn 10. IPVS的同步IPVS支持对连接的同步,两台IPVS设备可分别以MASTER或BACKUP运行,MASTER进程可将连接信息备

随便推点

高中数学思维导图_正统之独孤求败的博客-程序员秘密

高中数学三年最全、最新、最清晰的思维导图 涵盖高中数学三年所有知识要点集合▼不等式▼函数▼三角函数▼解三角形▼数列▼空间向量与立体几何▼直线方程▼圆的方程▼圆锥曲线▼复数▼简单几何体▼二项式定理▼ 概率与统计...

基于UDP的服务器端和客户端_能从udp数据包中分析谁是服务端吗_seven-soft的博客-程序员秘密

前面的文章中我们给出了几个TCP的例子,对于UDP而言,只要能理解前面的内容,实现并非难事。UDP中的服务器端和客户端没有连接UDP不像TCP,无需在连接状态下交换数据,因此基于UDP的服务器端和客户端也无需经过连接过程。也就是说,不必调用 listen() 和 accept() 函数。UDP中只有创建套接字的过程和数据交换的过程。UDP服务器端和客户端均只需1个套接字TC

把DLL文件打包进EXE的技巧(C#)_把dll打包到exe_魅力狂人的博客-程序员秘密

废话就不多说了,直接进入主题吧用VS2005建立一个windows项目,取名test引用dll文件编写代码,正常引用dll里的类库,同时在test项目添加资源文件(该文件就是刚才引用的dll文件)VS2005会自动生成引用代码,我这里引用的是IrisSkin2.dllinternal static byte[] IrisSkin2 ...{ get

传说中最经典的外包案例_Java基基的博客-程序员秘密

点击上方“Java基基”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏原创 | Java 2020超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析...

linuxC--makefile使用变量_HHHU丶的博客-程序员秘密

使用变量定义变量的一般形式:变量名 赋值符 变量值变量名:由字母、数字和下划线组成赋值符:主要有=、:=、+=、?= 不同的赋值符有不同的意义变量值:文本字符串在含有变量的 makefile 中,make 执行是吧变量名出现的地方用对应的变量值来替换。makefile中的变量类型类似于C语言中的宏。makefile中的变量是区分大小写的,也就是说比那辆"varl" 和 “Varl” ...