PTA 09-排序3 Insertion or Heap Sort (25分)
题目地址
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分)的更多相关文章
- 【PAT甲级】1098 Insertion or Heap Sort (25 分)
题意: 输入一个正整数N(<=100),接着输入两行N个数,表示原数组和经过一定次数排序后的数组.判断是经过插入排序还是堆排序并输出再次经过该排序后的数组(数据保证答案唯一). AAAAAcce ...
- 09-排序3 Insertion or Heap Sort (25 分)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- 1098 Insertion or Heap Sort (25分)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- pat1098. Insertion or Heap Sort (25)
1098. Insertion or Heap Sort (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- pat 甲级 1098. Insertion or Heap Sort (25)
1098. Insertion or Heap Sort (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...
- PAT甲题题解1098. Insertion or Heap Sort (25)-(插入排序和堆排序)
题目就是给两个序列,第一个是排序前的,第二个是排序中的,判断它是采用插入排序还是堆排序,并且输出下一次操作后的序列. 插入排序的特点就是,前面是从小到大排列的,后面就与原序列相同. 堆排序的特点就是, ...
- PAT Advanced 1098 Insertion or Heap Sort (25) [heap sort(堆排序)]
题目 According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and ...
- 1098. Insertion or Heap Sort (25)
According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...
- PAT (Advanced Level) 1098. Insertion or Heap Sort (25)
简单题.判断一下是插排还是堆排. #include<cstdio> #include<cstring> #include<cmath> #include<ve ...
随机推荐
- # Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析#
Volley源码解析(二) 没有缓存的情况下直接走网络请求源码分析 Volley源码一共40多个类和接口.除去一些工具类的实现,核心代码只有20多个类.所以相对来说分析起来没有那么吃力.但是要想分析透 ...
- github小技巧之Creating a pull request 创建 pull 请求
创建一个 pull 请求是为了协作更改存储库.这些变化会产生一个分支,它确保主分支保持干净整洁. 与commits提交是不同的,提交是fork之后的一种操作. 在你可以打开一个 pull 请求之前,您 ...
- 洛谷 P1438 无聊的数列
题目背景 无聊的YYB总喜欢搞出一些正常人无法搞出的东西.有一天,无聊的YYB想出了一道无聊的题:无聊的数列...(K峰:这题不是傻X题吗) 题目描述 维护一个数列{a[i]},支持两种操作: 1.1 ...
- Microsoft Sql server2005的安装步骤和常见问题解决方案
一:安装sql server 2005过程中出现 如下问题:“选择的功能中没有任何功能可以安装或升级”: 解决方案:Microsoft SQL Server 2005→配置工具→SQL配置管理器→SQ ...
- config文件声明非系统节点的方法
有一些自定义节点如果不声明会报出无法识别的节点 XXX 这时候要声明该节点 写法如下 <configSections> <!--声明一个节点组--> <sectionGr ...
- Luogu P5351 Ruri Loves Maschera
先ORZ\(Owen\)一发.感觉是个很套路的题,这里给一个蒟蒻的需要特判数据的伪\(n\log^2 n\)算法,真正的两只\(\log\)的还是去看标算吧(但这个好想好写跑不满啊) 首先这种树上路径 ...
- chrom浏览器-F12使用方法二
文摘摘自:https://blog.csdn.net/run65536/article/details/80568543 提示:右键点击图片选择在新窗口或新标签页中打开可查看大图. 一.Element ...
- 【转】将Eclipse中的CTRL+K搬到IDEA中
https://my.oschina.net/sprieo/blog/224838 IDEA的该功能是CTRL+F3,行为是获取当前光标位置的单词然后调用搜索.只需要按CTRL+F3一次,就可以实现C ...
- 多线程threadvar 变量设定
Delphi管理多线程之线程局部存储:threadvar 尽管多线程能够解决许多问题,但是同时它又给我们带来了很多的问题.其中主要的问题就是:对全局变量或句柄这样的全局资源如何访问?另外,当必须确保一 ...
- Bootstrap 默认/标准按钮
Bootstrap 默认/标准按钮 <!DOCTYPE html><html><head><meta http-equiv="Content-Typ ...