博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT——1035. 插入与归并
阅读量:5238 次
发布时间:2019-06-14

本文共 2810 字,大约阅读时间需要 9 分钟。

根据维基百科的定义:

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

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

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

输入格式:

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

输出格式:

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

 

输入样例1:

103 1 2 8 7 5 9 4 6 01 2 3 7 8 5 9 4 6 0

输出样例1:

Insertion Sort1 2 3 5 7 8 9 4 6 0

输入样例2:

103 1 2 8 7 5 9 4 0 61 3 2 8 5 7 4 9 0 6

输出样例2:

Merge Sort1 2 3 8 4 5 7 9 0 6
1 package com.hone.basical; 2  3 import java.util.Arrays; 4 import java.util.Scanner; 5  6 /** 7  * 原题目:https://www.patest.cn/contests/pat-b-practise/1035 8  *  9  * @author Xia 思路:首先第一个思路是模拟插入排序以及归并排序然后将排序的过程序列与结果做比较。这个方法整体比较复杂。10  *         第二个:原数组a,排列一部分的数组b 分析一下插入排序的特点:前面部分是已经排好的序列,后部分和原序列排列一样。11  *         那么可以先遍历前面的部分一直到(a[i]>a[i+1])为止,再将a[i+1+1]==b[i+1+1]一直比较至最后一个字符12  *         或者比较到不相等位置。如果j == a.length()-1,则为插入排序,否则为归并排序。 13  *         (2):找下面一个排序(a)插入排序:直接将b数组的前 i+1 个元素进行排序 (b)归并排序:需要模拟归并排序的过程。14  *         可以将a数组进行排序,排序结束的标志是,a[]中所有元素的顺序都与b[]中所有元素的顺序相同。(完全模拟归并排序的过程)然后进行一个归并排序即可15  *         方法:对于多个是否相同的判断,可以用一个flag标识。 16  */17 public class basicalLevel1035InsertMerge {18 19     public static void main(String[] args) {20         Scanner s = new Scanner(System.in);21         int n = s.nextInt();22         int[] a = new int[n];23         int[] a1 = new int[n];24         for (int i = 0; i < n; i++) {25             a[i] = s.nextInt();26         }27         for (int i = 0; i < n; i++) {28             a1[i] = s.nextInt();29         }30         int i, j;31         for (i = 0; (i < n - 1) && a1[i] < a1[i + 1]; i++);32         for (j = i + 1; (j < n) && (a1[j] == a[j]); j++);33         if (j == n) {34             System.out.println("Insertion Sort");35             Arrays.sort(a1, 0, i + 2);36             for (int j2 = 0; j2 < n - 1; j2++) {37                 System.out.print(a1[j2] + " ");38             }39             System.out.println(a1[n - 1]);40         } else {41             System.out.println("Merge Sort");42             int k = 1, flag = 1; // 用1表示两个数不相等43             while (flag == 1) {44                 flag = 0;45                 for (i = 0; i < n; i++) {46                     if (a[i] != a1[i])47                         flag = 1;48                 }49                 k = k * 2;50                 for (i = 0; i < n / k; i++)51                     Arrays.sort(a, i * k, (i + 1) * k);52                 Arrays.sort(a, n / k * k, n);     //将尾端的元素进行排序53             }54             for (int j2 = 0; j2 < n - 1; j2++)55                 System.out.print(a[j2] + " ");56             System.out.println(a[n - 1]);57         }58     }59 }

 

 

转载于:https://www.cnblogs.com/xiaxj/p/7991181.html

你可能感兴趣的文章
带搜索的ComboBox
查看>>
WPF 插拔触摸设备触摸失效
查看>>
如何优雅的实现INotifyPropertyChanged接口
查看>>
.NET Core IdentityServer4实战 第二章-OpenID Connect添加用户认证
查看>>
win10 uwp 使用 msbuild 命令行编译 UWP 程序
查看>>
解剖SQLSERVER 第十四篇 Vardecimals 存储格式揭秘(译)
查看>>
Chapter 1 Securing Your Server and Network(2):管理服务的SIDs
查看>>
2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>
查看>>
[Head First设计模式]一个人的平安夜——单例模式
查看>>
SQL Server 大数据搬迁之文件组备份还原实战
查看>>
HTML5实现图片文件异步上传
查看>>
Eclipse 4.2 汉化
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
网络时间获取
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Code as IaaS for Azure : Terraform 初步
查看>>
WebFrom 小程序【分页功能 】
查看>>
Learning-Python【26】:反射及内置方法
查看>>
day7--面向对象进阶(内含反射和item系列)
查看>>
Python深入01 特殊方法与多范式
查看>>