PAT 1089. Insert or Merge (25) 插入排序+归并排序
来源:互联网 发布:ipad淘宝hd微淘在哪 编辑:程序博客网 时间:2024/05/13 01:27
#include<iostream>#include<cstdio>#include<algorithm>#include<queue>#include<string.h>#include<cmath>#include<string>using namespace std;///*************************题意:分数运算输出表达式时要为整数+分数形式*************************//************************求解要点:先判断是否为插入若为插入,则求插入的下一步,这个好求关键是如何求归并的下一步先要求出当前归并的段中数量merlen通过样例可知归并并非用递归,而是先22归并,再44归并,再88归并故先让merlen=2,去判断是否都有序,若都有序再去判断是否44有序若44无序,则下一次归并应该为4,再以4做merlen做归并************************//***********************笔记:*********************/#define M 105#define INF 0xfffffint a[M],b[M];int main(){int n,i,j;scanf("%d",&n);for(i=0;i<n;i++)scanf("%d",&a[i]);for(i=0;i<n;i++)scanf("%d",&b[i]);for(i=1;i<n;i++)if(b[i]<b[i-1])break;int f=0;int k=i;for(i=k;i<n;i++)if(a[i]!=b[i]){f=1;break;}if(f==0){cout<<"Insertion Sort"<<endl;int c=b[k];for(i=k-1;i>=0;i--){if(b[i]>c)b[i+1]=b[i];else{b[i+1]=c;break;}}if(i<0)b[0]=c;for(i=0;i<n;i++){printf("%d",b[i]);if(i<n-1)cout<<" ";else cout<<endl;}}else{cout<<"Merge Sort"<<endl;int mlen = 1;int l,r;int t;int flag=0;while(!flag){mlen *= 2;l=0;r=mlen;while(r<=n){for(i=l+1;i<r;i++){//当序列内不有序时,说明是这个if(b[i]<b[i-1])flag=1;}if(flag==1)break;else{l=r;r=l+mlen;}}}//cout<<mlen<<endl;l=0;r=mlen;while(l<n){if(r>n)r=n;for(i=l;i<r;i++)for(j=i+1;j<r;j++)if(b[i]>b[j]){t=b[i];b[i]=b[j];b[j]=t;}l=r;r=l+mlen;}for(i=0;i<n;i++){printf("%d",b[i]);if(i<n-1)cout<<" ";else cout<<endl;}}return 0;}
阅读全文
0 0
- PAT 1089. Insert or Merge (25) 插入排序+归并排序
- PAT 1089. Insert or Merge (25)(插入排序还是归并排序)
- 1089. Insert or Merge -25[插入和归并排序]
- PAT 1088 1089. Insert or Merge (25)(排序啊)
- 1035. 插入与归并(25) PAT乙级&&1089. Insert or Merge (25)PAT甲级
- Pat Advanced 1089. Insert or Merge (25), 同Basic 1035. 插入与归并(25)
- PAT (Advanced Level) 1089. Insert or Merge (25) 插入和归并
- PAT 数据结构 07-排序2. Insert or Merge (25)
- 1089. Insert or Merge (25)【排序】——PAT (Advanced Level) Practise
- 09-排序2. Insert or Merge (25)
- 07-排序2. Insert or Merge (25)
- 07-排序2. Insert or Merge (25)
- PAT 1089. Insert or Merge (25)
- PAT A 1089. Insert or Merge (25)
- PAT 1089. Insert or Merge (25)
- PAT(Advance) 1089. Insert or Merge (25)
- PAT 1089. Insert or Merge (25)
- 【PAT】1089. Insert or Merge (25)
- 广东工业大学自动化(自动控制原理)作者:Haven
- 一元钱一瓶水,两个空瓶可以换一瓶,三个盖儿可以换一瓶,20元最多能喝多少?
- Wannafly挑战赛5 A珂朵莉与宇宙【暴力枚举】
- C/C++得到系统启动项
- 问题 P: 中庸之道(三)
- PAT 1089. Insert or Merge (25) 插入排序+归并排序
- 打印Log
- Monitor项目开发走过的路~透明Dialog型Activity
- php 如何判断为空详解
- # 详解决策树、python实现决策树
- Struts2第一个拦截器
- 问题 Q: 恶魔的连营
- Ubuntu 下的搜狗输入法的安装
- Eclipse配置错误——An internal error occurred during: "Building workspace".GC overhead limit exceeded