【PAT甲级】1098 Insertion or Heap Sort (25 分)
2024-10-08 10:39:23
题意:
输入一个正整数N(<=100),接着输入两行N个数,表示原数组和经过一定次数排序后的数组。判断是经过插入排序还是堆排序并输出再次经过该排序后的数组(数据保证答案唯一)。
AAAAAccepted code:
#define HAVE_STRUCT_TIMESPEC
#include<bits/stdc++.h>
using namespace std;
int a[],b[];
int c[][];
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin>>n;
for(int i=;i<=n;++i)
cin>>a[i];
for(int i=;i<=n;++i)
cin>>b[i];
int pos=;
for(int i=;i<n;++i)
if(b[i]>b[i+]){
pos=i;
break;
}
int pos2=;
for(int i=pos+;i<=n;++i)
if(a[i]!=b[i]){
pos2=i;
break;
}
if(!pos2){
cout<<"Insertion Sort\n";
int flag=,mn=b[pos+];
int ppos=;
for(int i=;i<=n;++i)
if(b[i]>mn){
ppos=i;
break;
}
for(int i=pos+;i>ppos;--i)
b[i]=b[i-];
b[ppos]=mn;
for(int i=;i<=n;++i){
cout<<b[i];
if(i<n)
cout<<" ";
}
}
else{
cout<<"Heap Sort\n";
int ppos=;
sort(a+,a++n);
for(int i=n;i;--i)
if(b[i]!=a[i]){
ppos=i;
break;
}
int mx=,flag=;
for(int i=;i<=ppos;++i)
if(b[i]>mx){
mx=b[i];
flag=i;
}
swap(b[flag],b[ppos]);
int s=;
while(s<ppos){
if(b[s*]>b[s]&&b[s*+]>b[s]&&ppos>s*+){
if(b[s*]>b[s*+]){
swap(b[s],b[s*]);
s=s*;
}
else{
swap(b[s],b[s*+]);
s=s*+;
}
}
else if(b[s*+]>b[s]&&ppos>s*+){
swap(b[s],b[s*+]);
s=s*+;
}
else if(b[s*]>b[s]&&ppos>s*){
swap(b[s],b[s*]);
s=s*;
}
if(s*>=ppos)
break;
}
for(int i=;i<=n;++i){
cout<<b[i];
if(i<n)
cout<<" ";
}
}
return ;
}
最新文章
- SQL 2008无法连接的解决办法
- JVM 基础知识
- PHP 二维数组根据相同的值进行合并
- Codeforces Round #378 (Div. 2) D. Kostya the Sculptor map+pair
- doctype声明、浏览器的标准、怪异等模式
- 轻松学习RSA加密算法原理 (转)
- retire
- JAVA课程设计-计算器(201521123028 李家俊)
- 开源Spring解决方案--lm.solution
- 什么时候App委托会收到App进程被结束的消息
- 【Netty源码学习】ServerBootStrap
- 基于LBS的六边形热力图算法
- Python之Unittest和Requests库详解
- CNN算法解决MNIST数据集识别问题
- poj2442 堆应用
- javascript中的高阶函数, 和 类定义Function, 和apply的使用
- ace后台管理系统扁平化框架
- splitChunks. cacheGroups 里面的 maxInitialRequests 含义
- Selenium学习笔记
- 面试题-Java设计模式举例