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的更多相关文章

  1. 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 ...

  2. 60. Insert Interval && Merge Intervals

    Insert Interval Given a set of non-overlapping intervals, insert a new interval into the intervals ( ...

  3. 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

  4. PAT甲级1089. Insert or Merge

    PAT甲级1089. Insert or Merge 题意: 根据维基百科: 插入排序迭代,消耗一个输入元素每次重复,并增加排序的输出列表.每次迭代,插入排序从输入数据中删除一个元素,在排序列表中找到 ...

  5. PAT 1089 Insert or Merge[难]

    1089 Insert or Merge (25 分) According to Wikipedia: Insertion sort iterates, consuming one input ele ...

  6. PAT1089. Insert or Merge

    PAT1089. Insert or Merge 题目大意 给定一个初始序列src, 一个排序当中的序列tar, 问排序方式是 Insert Sort, 或者 Merge Sort. 并输出下一次迭代 ...

  7. pat1089. Insert or Merge (25)

    1089. Insert or Merge (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Accor ...

  8. Insert or Merge

    7-13 Insert or Merge(25 分) According to Wikipedia: Insertion sort iterates, consuming one input elem ...

  9. PAT_A1089#Insert or Merge

    Source: PAT A1089 Insert or Merge (25 分) Description: According to Wikipedia: Insertion sort iterate ...

随机推荐

  1. [翻译练习]密码学1小时入门 (Everything you need to know about cryptography in 1 hour)

    原文:http://www.daemonology.net/papers/crypto1hr.pdf   [密码学简介]   很多人都误用了密码学   一般可归为三类: 1. 愚蠢 比如Google ...

  2. 基于jFinal建立简单的服务端-接收请求并返回指定内容

    本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...

  3. Partitioning & Archiving tables in SQL Server (Part 2: Split, Merge and Switch partitions)

    Reference: http://blogs.msdn.com/b/felixmar/archive/2011/08/29/partitioning-amp-archiving-tables-in- ...

  4. 从ICassFactory为CLSID为{17BCA6E8-A950-497E-B2F9-AF6AA475916F}的COM组件创建实例失败问题解决方法

    从ICassFactory为CLSID为{17BCA6E8-A950-497E-B2F9-AF6AA475916F}的COM组件创建实例失败,原因是出现以下错误:c001f011.(Microsoft ...

  5. [转]DevExpress.XtraGrid.GridControl gridView自动列宽代码

    gridView1.OptionsView.ColumnAutoWidth = false;   for (int I = 0; I < gridView1.Columns.Count; I++ ...

  6. 解决linux 无法下载 oracle 官网 java的 安装包

    wget --no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-co ...

  7. Maximo子表中增加附件功能

    附件功能的实现(详见ewell.webclient.beans.warranty.WarrantysDateBean ,ewell.webclient.beans.doclinks.custom.Ad ...

  8. 微信支付之JSAPI开发-第二篇:业务流程详解与方案设计

    微信支付流程 流程: 上图的网址为:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4 如上图所示,微信网页支付的具体流程大致分为 ...

  9. ---bind 配置

    http://blog.csdn.net/zjunjun/article/details/7419125

  10. Android之官方下拉刷新控件SwipeRefreshLayout

    SwipeRefreshLayout 是在V4包里面,首先要先导入V4包,最新的V4包里面才有这控件 首先是布局 <android.support.v4.widget.SwipeRefreshL ...