博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PAT 甲级 1098 Insertion or Heap Sort (25 分)
阅读量:3898 次
发布时间:2019-05-23

本文共 909 字,大约阅读时间需要 3 分钟。

【题意】

给定一个序列的初始状态和经过某种排序几个步骤之后的结果,要求判断是插入排序还是堆排序,并输出执行下一个步骤之后的结果。

【题解】

不清楚插入排序和堆排序的请移步:

首先,我们根据排序过程中得到的序列判断是哪种排序。怎么判断呢?如果能把序列分成两段,前一段是有序的,后一段是跟原序列相同的,这样就是插入排序;否则是堆排序。如果是插入排序,那么我们只需要将下一个元素加入到前一段中排个序即可;如果是堆排序,我们只需要寻找到最后一个没完成排序的位置,交换首尾的位置,再把这个位置之前的所有元素依次向下调整为大顶堆即可。

【代码】

#include 
using namespace std;int a[105],b[105];int main(){ int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) scanf("%d",&b[i]); int l,r,f=1; for(l=1;l<=n;l++) if(b[l]>b[l+1]) break; for(r=n;r>l;r--) if(a[r]!=b[r]) f=0; if(f){ printf("Insertion Sort\n"); sort(b+1,b+l+2); } else{ printf("Heap Sort\n"); sort(a+1,a+1+n); for(l=n;b[l]==a[l];l--); swap(b[1],b[l]); l--; for(int i=l/2;i>=1;i--){ int flag=1,pos=i; while(flag){ int t=pos; if(pos*2<=l&&b[t]

 

转载地址:http://ehfen.baihongyu.com/

你可能感兴趣的文章
资源之收集列表整理
查看>>
JS之kindeditor的用法简介
查看>>
Linux之最简字符驱动的编码模型
查看>>
服务之Windows平台上搭建SVN服务
查看>>
Python之封装diff命令的项目比较命令(格式化diff输出结果)
查看>>
Shell之定时拉起脚本
查看>>
Shell之导出数据库的表为Excel的脚本
查看>>
Shell之预启动脚本
查看>>
WebKit之Node的继承关系图
查看>>
WebKit之RenderObject继承关系图整理
查看>>
WebKit之JSCell的继承关系图
查看>>
WebKit之HTMLTreeBuilder类的解析框架
查看>>
WebKit之HTMLConstructionSite类组成
查看>>
Linux之so加载原理分析
查看>>
C之基于signal信号的交互式的测试功能模块(触发时机)
查看>>
Linux之libevent的编译&测试
查看>>
Linux之kc.cfg文件参数详解
查看>>
MySql之简单SQL用法整理
查看>>
PHP之thinkphp的数据库操作代码段汇总
查看>>
Linux之tcpdump用法汇总整理
查看>>