题目

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. Heap sort divides its input into a sorted and an unsorted region, and it iteratively shrinks the unsorted region by extracting the largest element and moving that to the sorted region. it involves the use of a heap data structure rather than a linear-time search to find the maximum. 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 N (<=100). Then in the next line, N integers are given as the initial sequence. The last line contains the partially sorted sequence of the N 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 “Heap 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 6 0

6 4 5 1 0 3 2 7 8 9

Sample Output 2:

Heap Sort

5 4 3 1 0 2 6 7 8 9

题目分析

已知排序前和排序一部分数据后的序列,判断是插入排序还是堆排序,并打印下一次排序的结果(已知所有序列最终排序结果为升序,隐含条件:堆为大顶堆)

解题思路

  1. 判断是插入排序还是堆排序,插入排序中间序列特点:从0i是已经排序好的,in-1跟排序前一模一样
  2. 排序

    2.1 插入排序下一次排序结果,不需要模拟插入排序,只要用sort将0~i+1升序排序即可

    2.2 堆排序下一次排序结果,需要从n-1倒序寻找第一个小于0处元素的位置k,交换0与k处元素,对堆顶元素从0~k-1向下堆化

Code

#include <iostream>
#include <algorithm>
using namespace std;
int bs[100],as[100];
void downAdjust(int low,int high) {
int i=low,j=2*i+1;
while(j<=high) {
if(j+1<=high&&as[j+1]>as[j])j=j+1;
if(as[i]<as[j]) {
swap(as[i],as[j]);
i=j;
j=2*i+1;
} else {
break;
}
}
}
int main(int argc,char * argv[]) {
int n;
scanf("%d",&n);
for(int i=0; i<n; i++)
scanf("%d",&bs[i]);
for(int i=0; i<n; i++)
scanf("%d",&as[i]);
int i,j;
for(i=0; i<n&&as[i]<=as[i+1]; i++);
for(j=i+1; j<n&&as[j]==bs[j]; j++);
if(j==n) {
printf("Insertion Sort\n");
sort(as,as+i+1+1);
} else {
printf("Heap Sort\n");
for(j=n-1; j>=1&&as[j]>=as[0]; j--);
swap(as[0],as[j]);
downAdjust(0,j-1);
}
printf("%d",as[0]);
for(int i=1; i<n; i++)
printf(" %d",as[i]);
return 0;
}

PAT Advanced 1098 Insertion or Heap Sort (25) [heap sort(堆排序)]的更多相关文章

  1. PAT甲级1098. Insertion or Heap Sort

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

  2. pat 甲级 1098. Insertion or Heap Sort (25)

    1098. Insertion or Heap Sort (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...

  3. PAT甲级——1098 Insertion or Heap Sort (插入排序、堆排序)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90941941 1098 Insertion or Heap So ...

  4. PAT (Advanced Level) 1089. Insert or Merge (25)

    简单题.模拟一下即可. #include<cstdio> #include<cstring> #include<cmath> #include<vector& ...

  5. PAT (Advanced Level) 1113. Integer Set Partition (25)

    简单题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...

  6. PAT (Advanced Level) 1062. Talent and Virtue (25)

    简单排序.题意较长. #include<cstdio> #include<cstring> #include<cmath> #include<queue> ...

  7. PAT (Advanced Level) 1052. Linked List Sorting (25)

    简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...

  8. PAT (Advanced Level) 1017. Queueing at Bank (25)

    简单模拟. #include<iostream> #include<cstring> #include<cmath> #include<algorithm&g ...

  9. PAT (Advanced Level) 1012. The Best Rank (25)

    简单排序题. 注意:分数相同的人排名相同. #include<iostream> #include<cstring> #include<cmath> #includ ...

随机推荐

  1. call 和 apply 用法

    ECMAScript规范中,所有函数都包含这两个方法,并且两个方法的使用基本一致,都是用于改变函数的作用域,即改变函数体内 this 指向.不同的是 call 方法的第二个参数可以接收任意个参数,以逗 ...

  2. Ayoub's function

    思维,就是反过来想,题解太强了 #include <bits/stdc++.h> using namespace std; int main() { long long t; cin> ...

  3. PyCharm配置TensorFlow开发环境

    Anaconda自带的Jupyter Notebook很方便,但是执行速度较慢,缺少调试环境.PyCharm与Jupyter Notebook相比,执行速度更快,而且提供了类似Matlab的调试工具, ...

  4. 从三星官方uboot开始移植

    移植前的准备 下载 android_uboot_smdkv210.tar.bz2 这个文件 开始移植 本人使用的开发板是九鼎的 x210,在三星 uboot 的主 Makefile 中找到了类似的 s ...

  5. Day6 - C - Count HYSBZ - 1452 /1452: [JSOI2009]Count

    Description 一个N*M的方格,初始时每个格子有一个整数权值,接下来每次有2个操作: 改变一个格子的权值 求一个子矩阵中某个特定权值出现的个数   Input 每一行有两个数字N,M 接下来 ...

  6. Springboot---显示图片/字符串/map集合/list集合

    1.字符串/图片/map集合 @GetMapping("/hello") public String test(Model model){ String message=" ...

  7. Pycharm激活码(失效更新)

    该方法不需要修改Hosts, 如果修改过请删除后再激活. 获取激活码: http://idea.medeming.com/jet/images/jihuoma.txt http://idea.mede ...

  8. 4.RabbitMQ 4种交换模式

    请看 demo https://github.com/kevin-li-06/eshop.git

  9. Django(九)模型:dj查询数据库的函数(方法)

    一.查询函数 通过模型类.objects属性可以调用如下函数,实现对模型类对应的数据表的查询. 函数表 函数名 功能 返回值 说明 get 返回表中满足条件的一条且只能有一条数据. 返回值是一个模型类 ...

  10. [BJDCTF2020]EasySearch

    0x00 知识点 Apache SSI 远程命令执行漏洞 链接: https://www.cnblogs.com/yuzly/p/11226439.html 当目标服务器开启了SSI与CGI支持,我们 ...