PAT_1089. Insert or Merge
来源:互联网 发布:上海发型设计 知乎 编辑:程序博客网 时间:2024/06/07 14:35
#include <iostream>#include <algorithm>using namespace std;int a[105],b[105],N;int firstDifferent=N-1;bool InsertSort(){for(int i=0;i<N-1;i++){if(b[i+1]<b[i]){firstDifferent=i+1;break;}}for(int i=firstDifferent;i<N;i++)if(a[i]!=b[i])return false;return true;}int main(){cin>>N;for(int i=0;i<N;i++)cin>>a[i];for(int i=0;i<N;i++)cin>>b[i];if(InsertSort()==true){sort(b,b+firstDifferent+1);cout<<"Insertion Sort"<<endl;for(int i=0;i<N;i++){if(i==0)cout<<b[i];elsecout<<" "<<b[i];}}else{int start=0,end=1,gap=1,find=0;while(1){gap*=2;for(int i=0;i*gap<N;i++){start=i*gap;end=i*gap+gap<N?i*gap+gap:N;sort(a+start,a+end);}if(find==1){cout<<"Merge Sort"<<endl;for(int i=0;i<N;i++){if(i==0)cout<<a[i];elsecout<<" "<<a[i];}break;}int index=0;while(index<N){if(a[index]!=b[index])break;index++;}if(index==N)find=1;}}return 0;}
本题考查插入排序和归并排序。
判断是否为插入排序的思路很简单,不需要模拟插入排序的整个过程,因为插入排序的[0,k]元素一定是升序的,[k+1,N-1]的元素一定是和原序列相同的。
判断是否为归并排序就需要 模拟归并排序的过程,gap为当前的步长,就是一个子序列的长度。
阅读全文
0 0
- PAT_1089. Insert or Merge
- 1089.Insert or Merge
- pat1089 Insert or Merge
- 1089. Insert or Merge
- 1089 Insert or Merge
- 1089. Insert or Merge
- 1089. Insert or Merge
- 1089. Insert or Merge
- 1089. Insert or Merge (25)
- pat 1089 Insert or Merge
- PAT 1089. Insert or Merge
- 1089. Insert or Merge (25)
- 1089. Insert or Merge (25)
- 1089. Insert or Merge (25)
- 1089. Insert or Merge (25)
- 1089. Insert or Merge (25)
- 1089. Insert or Merge (25)
- 1089. Insert or Merge (25)
- ReactNaive组件生命周期
- Hibernate笔试题
- 设计模式——创建型模式
- JavaScript中使用window.open被拦截解决办法
- 导入和导出功能用例设计
- PAT_1089. Insert or Merge
- hadoop的读写操作
- Nodejs进阶:使用DiffieHellman密钥交换算法
- 关于在VM和主机之间ping不通的解决办法
- django admin自定义HTML模板界面替换logo和header
- 对称加密----AES和DES加密、解密
- 数据库原理 数据库全局概览
- 【绝对能用】阿里云ECS上Centos7安装Apache(httpd)并实现多域名转不同tomcat配置
- 【scala 语法基础】变量、函数、控制结构、数据类型