1035. 插入与归并(25)
2015-07-06 01:33
246 查看
解题思路:根据题中要求 从判断插入排序开始 如果判断 yes 则插入下一个元素 进行下一趟插入排序
如果 no 则 从原始序列开始 一遍遍 归并排序 直到和 中间序列 相对 那么在进行一次 归并
最后 输出 答案序列
如果 no 则 从原始序列开始 一遍遍 归并排序 直到和 中间序列 相对 那么在进行一次 归并
最后 输出 答案序列
#include<iostream> #include<algorithm> using namespace std; int main() { int N; int A1[101], A2[101]; // 原始序列A1 中间序列A2 int i, j; cin>>N; for( i=0; i<N; i++ ) cin>>A1[i]; for( i=0; i<N; i++ ) cin>>A2[i]; for( i=0; A2[i]<=A2[i+1] && i<N-1; i++ ) ; // i作为有序序列最后一个元素下标退出循环 for( j=++i; A1[j]==A2[j] && j<N; j++ ) ; // A1 A2从 第一个无序的元素开始 逐一比对 if( j==N ){// 前半部分有序而后半部分未改动可以确定是插入排序 cout<<"Insertion Sort"<<endl; sort( A1, A1+i+1 ); } else{ cout<<"Merge Sort"<<endl; int k = 1; int flag=1; //用来标记是否归并到 “中间序列” while( flag ) { flag = 0; for( i=0; i<N; i++ ) if( A1[i]!=A2[i] ) flag = 1; k*=2; for( i=0; i<N/k; i++ ) sort( A1+i*k, A1+(i+1)*k ); for( i=k*(N/k); i<N; i++ ) // 对 非偶数序列的“尾巴”进行排序 sort( A1+k*(N/k), A1+N ); } } cout<<A1[0]; for( i=1; i<N; i++ ) cout<<" "<<A1[i]; cout<<endl; return 0; }
相关文章推荐
- map和list的用法:HashMap排序(二)
- Java_生活工具箱在线系统发布
- [Perl]根据当前时间来创建文件夹
- 2015.07.05总结
- PHP 错误与异常 笔记与总结(17 )像处理异常一样处理 PHP 错误
- Facebook/atc环境搭建总结
- 关于配置
- [Tools]ubuntu1204 webmin安装配置
- 安徽科技学院 2014-2015-2学期计算机14级12班《C语言程序设计II》期末考试
- 数学建模 数学模型 GM模型 灰色模型 灰色预测(一)
- 测试排序算法耗时
- RAID5阵列中两块磁盘告警后的处理步骤
- Tsung-安装-1
- Hbase总结(六)hbase37个笔试题
- 设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数
- 关于android在TOMCAT服务器下载文件名带中文的文件的编码问题
- Chromium和WebKit的智能指针实现原理分析
- 没有试过,你永远不知道
- CodeForces 343D 线段树维护dfs序
- boost::circular_buffer简介