PTA Insert or Merge
According to Wikipedia:
Insertion sort iterates, consuming one input element each repetition, and growing a sorted output list. Each iteration, insertion sort removes one element from the input data, finds the location it belongs within the sorted list, and inserts it there. It repeats until no input elements remain.
Merge sort works as follows: Divide the unsorted list into N sublists, each containing 1 element (a list of 1 element is considered sorted). Then repeatedly merge two adjacent sublists to produce new sorted sublists until there is only 1 sublist remaining.
Now given the initial sequence of integers, together with a sequence which is a result of several iterations of some sorting method, can you tell which sorting method we are using?
Input Specification:
Each input file contains one test case. For each case, the first line gives a positive integer NN (\le 100≤100). Then in the next line, NN integers are given as the initial sequence. The last line contains the partially sorted sequence of the NN numbers. It is assumed that the target sequence is always ascending. All the numbers in a line are separated by a space.
Output Specification:
For each test case, print in the first line either "Insertion Sort" or "Merge Sort" to indicate the method used to obtain the partial result. Then run this method for one more iteration and output in the second line the resuling sequence. It is guaranteed that the answer is unique for each test case. All the numbers in a line must be separated by a space, and there must be no extra space at the end of the line.
Sample Input 1:
10
3 1 2 8 7 5 9 4 6 0
1 2 3 7 8 5 9 4 6 0
Sample Output 1:
Insertion Sort
1 2 3 5 7 8 9 4 6 0
Sample Input 2:
10
3 1 2 8 7 5 9 4 0 6
1 3 2 8 5 7 4 9 0 6
Sample Output 2:
Merge Sort
解答
这题目就是先用插入排序去尝试,每插入一次就比较与题目中的数组是否相等,如果相等的话就再进行一次插入然后输出(用flag变量来控制,相等就置为true,每一次插入后检查flag为true就跳出循环),如果全部排序完成还没有相等的,就说明是归并排序,这里隐含条件是用迭代的归并排序,同样每一次都与题中数组比较,相等后就再归并一次。
// // main.c // Insert or Merge // // Created by 余南龙 on 2016/12/9. // Copyright © 2016年 余南龙. All rights reserved. // #include <stdio.h> #include <stdlib.h> #define true 1 #define false 0 #define MAX 101 int comp(const void *a, const void *b){ return *(int*)a - *(int*)b; } void Init(int initial[], int tmp[], int partial[], int *N){ int i, tmp_val; scanf("%d", N); tmp_val = *N; ; i < tmp_val; i++){ scanf("%d", initial + i); tmp[i] = initial[i]; } ; i < tmp_val; i++){ scanf("%d", partial + i); } } void Output(int a[], int size){ int i; ; i < size; i++) { == i) { printf("%d", a[i]); } else{ printf(" %d", a[i]); } } } int Is_Equal(int a[], int b[], int size){ int i; ; i < size; i++){ if(a[i] != b[i]){ return false; } } return true; } int Is_Insertion_Sort(int initial[], int partial[], int size){ ; ; i < size; i++){ tmp = initial[i]; ; j >= ; j--){ if(initial[j] > tmp){ initial[j + ] = initial[j]; } else{ break; } } initial[j + ] = tmp; == flag){ return true; } if(Is_Equal(initial, partial, size)){ flag = ; } } return false; } void New_Merge_Sort(int initial[], int partial[], int size){ int i, j, flag = false; ; i < size; i *= ){ ; j < size; j += i * ){ < size) qsort(initial + j, i * , sizeof(int), comp); else if(size - j > i){ qsort(initial + j, size - j, sizeof(int), comp); } } if(flag){ break; } if(Is_Equal(initial, partial, size)){ flag = true; } } } int main(){ int N; int initial[MAX], partial[MAX], tmp[MAX]; Init(initial, tmp, partial, &N); if(!Is_Insertion_Sort(initial, partial, N)){ New_Merge_Sort(tmp, partial, N); printf("Merge Sort\n"); Output(tmp, N); } else{ printf("Insertion Sort\n"); Output(initial, N); } }
PTA Insert or Merge的更多相关文章
- PTA 09-排序2 Insert or Merge (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/675 5-13 Insert or Merge (25分) According to ...
- 60. Insert Interval && Merge Intervals
Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...
- 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- PAT甲级1089. Insert or Merge
PAT甲级1089. Insert or Merge 题意: 根据维基百科: 插入排序迭代,消耗一个输入元素每次重复,并增加排序的输出列表.每次迭代,插入排序从输入数据中删除一个元素,在排序列表中找到 ...
- PAT 1089 Insert or Merge[难]
1089 Insert or Merge (25 分) According to Wikipedia: Insertion sort iterates, consuming one input ele ...
- PAT1089. Insert or Merge
PAT1089. Insert or Merge 题目大意 给定一个初始序列src, 一个排序当中的序列tar, 问排序方式是 Insert Sort, 或者 Merge Sort. 并输出下一次迭代 ...
- pat1089. Insert or Merge (25)
1089. Insert or Merge (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Accor ...
- Insert or Merge
7-13 Insert or Merge(25 分) According to Wikipedia: Insertion sort iterates, consuming one input elem ...
- PAT_A1089#Insert or Merge
Source: PAT A1089 Insert or Merge (25 分) Description: According to Wikipedia: Insertion sort iterate ...
随机推荐
- prototype.js简介
prototype.js简介 2007-11-21 14:22 prototype.js是一个很强大的Javascript函数库,它可以让你很轻松的使用一些特效,实现AJAX的功能.虽然prototy ...
- python 核心编程课后练习(chapter 5)
5-2 #5-2 def mul(x, y): return x * y print mul(4,5) 5-3 #5-3 def value_score(num): if 90<=num< ...
- guava – Optional
过多的使用null可能会导致大量的bugs,Google code 底层代码中,95%的集合类默认不接受null值.对null值,使用快速失败拒绝null比默认接受更好. 另外,null本身的含义很模 ...
- load mainaccount
static void LoadMainAccountCSV(Args _args) { /* SysExcelApplication excel; SysExcelWorkbooks ...
- php命名空间和autoload
参考: 1.http://www.cnblogs.com/thinksasa/p/3423480.html PHP的命名空间 2.http://blog.jjonline.cn/phptech/15 ...
- ES6新特性之模板字符串
ES6新特性概览 http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串 http://www.infoq.c ...
- Linux cache释放
cache释放: To free pagecache: > /proc/sys/vm/drop_caches To free dentries and inodes: > /proc/sy ...
- git 撤销commit
如果不小心commit了一个不需要commit的文件,可以对其进行撤销. 先使用git log 查看 commit日志 commit 422bc088a7d6c5429f1d0760d008d86c5 ...
- SQL Server提高事务复制效率优化(一)总体概述
随着公司业务的发展,数据量增长迅速,在解决Scale Out的同时,还要考虑到主从的复制延迟问题,尽量降到1s以内满足线上业务,如果不调整,SQL Server默认的配置可能平均要3s左右.生产的 ...
- java System.getProperty()参数大全
java.version Java Runtime Environment versionjava.vendor Java Runtime Environment vendorjava.vendor. ...