题目地址

https://pta.patest.cn/pta/test/16/exam/4/question/676

5-14 Insertion or Heap Sort   (25分)

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 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 "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
/*
评测结果
时间 结果 得分 题目 编译器 用时(ms) 内存(MB) 用户
2017-07-06 18:04 答案正确 25 5-14 gcc 14 1
测试点结果
测试点 结果 得分/满分 用时(ms) 内存(MB)
测试点1 答案正确 7/7 1 1
测试点2 答案正确 6/6 2 1
测试点3 答案正确 2/2 1 1
测试点4 答案正确 2/2 2 1
测试点5 答案正确 4/4 14 1
测试点6 答案正确 4/4 14 1
*/
#include<stdio.h>
#define MAXN 100
int A[MAXN],B[MAXN],tmp[MAXN];
int gNextTurnToPrint=0;
int gPrinted=0;
int gSortType=0;
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
void DBG_printarray(int N) //调试用函数
{
int d;
for(d=0;d<N;d++)
{
printf("%d ",A[d]);
}
printf("\n");
}
void CheckMethod(int N)
{
if(gPrinted)
return; int i;
if (gNextTurnToPrint==1)
{
if(gSortType==0)
printf("Insertion Sort\n");
else
printf("Heap Sort\n"); for(i=0;i<N;i++)
{
printf("%d",A[i]);
if(i!=N-1)
printf(" ");
}
gNextTurnToPrint=0;
gPrinted=1;
return;
} for (i=0;i<N;i++)
{
if(A[i]!=B[i])
return;
}
gNextTurnToPrint=1;
} void InsertionSort(int a[],int left ,int right,int N)
{
int i,j,temp;
for(i=left;i<right;i++)
{
temp=a[i+1];
for(j=i+1;j>left;j--)
{
if(temp<a[j-1])
a[j]=a[j-1];
else break;
}
a[j]=temp;
CheckMethod(N);
}
} void PrecDown(int a[],int x,int N)
{
int temp=a[x];
int parent,child;
parent=x;
for(child=2*parent+1; child<= N ;child=child*2+1)
{
if(child!=N)
{
if(a[child+1]>a[child])
child++;
}
if(temp<a[child])
{
a[parent]=a[child];
parent=child;
} else break;
}
a[parent]=temp;
// DBG_printarray(N+1);
} void HeapSort(int a[],int N)
{
//建大顶堆然后把首元素后移
int i,ptrRight=N-1,temp,d;
for(i=(ptrRight-1)/2;i>=0;i--)
{
PrecDown(a,i,ptrRight);
}
for(i=ptrRight;i>0;i--)
{
temp=a[i];
a[i]=a[0];
a[0]=temp;
PrecDown(a,0,i-1);
CheckMethod(N); }
} int main()
{
int i,N;
scanf("%d",&N); for(i=0;i<N;i++)
{
scanf("%d",&A[i]);
tmp[i]=A[i];
} for(i=0;i<N;i++)
{
scanf("%d",&B[i]);
} InsertionSort(A,0,N-1,N); if(!gPrinted)
{
for(i=0;i<N;i++)
{
A[i]=tmp[i];
}
gSortType=1;
HeapSort(A,N);
} }

  

PTA 09-排序3 Insertion or Heap Sort (25分)的更多相关文章

  1. 【PAT甲级】1098 Insertion or Heap Sort (25 分)

    题意: 输入一个正整数N(<=100),接着输入两行N个数,表示原数组和经过一定次数排序后的数组.判断是经过插入排序还是堆排序并输出再次经过该排序后的数组(数据保证答案唯一). AAAAAcce ...

  2. 09-排序3 Insertion or Heap Sort (25 分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  3. 1098 Insertion or Heap Sort (25分)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  4. pat1098. Insertion or Heap Sort (25)

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

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

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

  6. PAT甲题题解1098. Insertion or Heap Sort (25)-(插入排序和堆排序)

    题目就是给两个序列,第一个是排序前的,第二个是排序中的,判断它是采用插入排序还是堆排序,并且输出下一次操作后的序列. 插入排序的特点就是,前面是从小到大排列的,后面就与原序列相同. 堆排序的特点就是, ...

  7. PAT Advanced 1098 Insertion or Heap Sort (25) [heap sort(堆排序)]

    题目 According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and ...

  8. 1098. Insertion or Heap Sort (25)

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  9. PAT (Advanced Level) 1098. Insertion or Heap Sort (25)

    简单题.判断一下是插排还是堆排. #include<cstdio> #include<cstring> #include<cmath> #include<ve ...

随机推荐

  1. Java语言中自动生成随机数

    参考原文:http://zhidao.baidu.com/link?url=nB3BT69wmUAiSPfKGgK5Q7HOFFP9AIE04AthreRd9yYcwKhUQsQRWlMdMhW1Qm ...

  2. ubuntu快捷键收集

    Ctrl+Alt+T 终端 -Ctrl+Shift+C 终端复制 -Ctrl+Shift+V 终端粘贴 -Ctrl+L 清屏 -Ctrl+; 从剪切板中获得输入提示(不小心点到被诡异的提示吓到了) - ...

  3. 精通AngularJS(三)深入scope,继承结构,事件系统和生命周期

    深入探讨 Scope 作用域 每一个 $scope 都是类 Scope 的一个实例.类 Scope 拥有可以控制 scope 生命周期的方法,提供事件传播的能力,并支持模板渲染. 作用域的层次结构 让 ...

  4. mac系统连接Android手机

    1. 打开终端,输入:system_profiler SPUSBDataType,查看Mac系统所有USB设备信息,找到相应的厂商Vender ID 2.输入echo "Vender ID& ...

  5. 关于搭建系统直播和Thinkphp的杂谈(持续更新)

    Q:Access denied for user 'root'@'localhost' 错误 A:第一种:配置文件中把数据库的用户名密码再改一遍,把runtime里的文件删除  第二种:修改syste ...

  6. (八)mybatis之映射器

    映射器 映射器是由Java接口和XML文件(或注解)共同组成的,作用如下: ①   定义参数类型. ②   描述缓存. ③   描述SQL语句. ④   定义查询结果和POJO的映射关系. 以下用两种 ...

  7. UVA 1625 Color Length 颜色的长度 (预处理+dp)

    dp[i][j]表示前一个序列拿了i个颜色,后一个序列拿了j个颜色的最小花费. 转移的时候显然只能向dp[i+1][j],或dp[i][j+1]转移,每增加拿走一个颜色,之前已经出现但没结束的颜色个数 ...

  8. WPF中在后台实现控件样式

    加入现在有一个Button的样式如下: <Style TargetType="{x:Type Button}" x:Key="MyButton">. ...

  9. Maven归纳

      一.常用功能 1.Maven的中央仓库 https://mvnrepository.com/ 2.添加jar包依赖 1.首先点击pom.xml,然后点击弹出页面中的Dependencies选项,接 ...

  10. mac文件夹怎么重命名?苹果电脑文件夹重命名快捷键

    windows系统下给文件夹重命名相信很多朋友都很熟悉,那么Mac OS系统怎么给文件重命名呢,相信很多刚刚入手Mac OS系统的亲们都会有次疑问,下面小编告诉你Mac OS系统的文件夹到底要怎样才能 ...