题目地址

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代码写一个简单的网上购物车程序

    需求:1.写一个商品类,有商品编号.商品名称.商品分类.商品单价属性.2.写一个商品条目信息类,有商品和数量两个属性,有商品总价格方法. 3.写一个购物车类,有添加商品方法.查看订单信息,删除商品,修 ...

  2. yield和yield from

    yield from的前世今生都在 这个PEP里面,总之大意是原本的yield语句只能将CPU控制权 还给直接调用者,当你想要将一个generator或者coroutine里带有 yield语句的逻辑 ...

  3. Android Studio项目上传到GitHub

    首先,在github上创建仓库:选择Repositories,点击右边的“New”,输入仓库名称,点击“create repositories”. studio的git配置: 安装好git后启动And ...

  4. HTTP 三次握手  建立连接 和  四次握手断开连接

    三次握手建立连接    第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机: 第二次握手:主机B收到请求后要确 ...

  5. c#网站对服务器的数据库的备份与还原

    在网站上备份数据库 1.前台页面 <div> 需要备份的文件名:<asp:TextBox ID="bfFile" runat="server" ...

  6. The Django Book 第三章 试图和URL配置

    之前自学Django也有一段时间了,再过一个月就要入职新公司了(Python Django开发),即使现在还在入门级徘徊,再好好把Django基础过一遍吧. The Django Book 第三章 试 ...

  7. 字符串赋值方式理解 sizeof 和strlen的一些区别

    #include<stdio.h>#include<string.h>  int main(){ int a,i=0; char ch[10000]; while(scanf( ...

  8. MATLAB——解数独

    数独 数独是一种逻辑游戏,玩家需要根据9x9盘面的已知数字,推理出剩余所有空格的数字,并满足每一行.每一列和每个粗线宫(3x3)内均含1~9,不重复. MATLAB中有关函数 M = dlmread( ...

  9. 【转】Spring, MyBatis 多数据源的配置和管理

    同一个项目有时会涉及到多个数据库,也就是多数据源.多数据源又可以分为两种情况: 1)两个或多个数据库没有相关性,各自独立,其实这种可以作为两个项目来开发.比如在游戏开发中一个数据库是平台数据库,其它还 ...

  10. CPP-网络/通信:SOCKET

    客户端实现代码: //引入头文件 #include <WinSock2.h> //客户端创建Socket////////////////////////////////////////// ...