PAT乙级1035 插入与归并 (25 分)
Posted 辉小歌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PAT乙级1035 插入与归并 (25 分)相关的知识,希望对你有一定的参考价值。
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int n;
vector<int>a(105,0),b(105,0),temp;
bool flag;
void insert_sort()//插入排序
{
int index=0;
int i,j,s;
for(i=1;i<n;i++)
{
s=temp[i];
for(j=i;j>0&&temp[j-1]>s;j--)
{
temp[j]=temp[j-1];
}
temp[j]=s;
if(temp==b)
{
flag=true;
break;
}
}
if(flag)
{
i++;
s=b[i];
if(i<n)
{
for(j=i;j>0&&b[j-1]>s;j--)
{
b[j]=b[j-1];
}
b[j]=s;
}
}
}
void Merge_sort()//归并排序
{
int i,j;
for(i=2;i<n;i=i*2)
{
for(j=0;j+i<=n;j+=i)
{
sort(a.begin()+j,a.begin()+j+i);
}
if(n%i!=0)
{
sort(a.begin()+n/i*i,a.begin()+n/i*i+2);
}
if(a==b)
{
break;
}
}
i=i*2;
for(j=0;j+i<=n;j+=i)
{
sort(b.begin()+j,b.begin()+j+i);
}
if(n%i!=0)
{
sort(b.begin()+n/i*i,b.begin()+n/i*i+n%i);
}
}
int main(void)
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
temp=a;
insert_sort();
if(flag) cout<<"Insertion Sort"<<endl;
else Merge_sort(),cout<<"Merge Sort"<<endl;
for(int i=0;i<n;i++)
{
if(i) cout<<" ";
cout<<b[i];
}
return 0;
}
精简版:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>a(105,0),b(105,0),s;
int n,flag;
void insert_sort()
{
int i,j,temp;
for(i=1;i<n;i++)
{
temp=a[i];
for(j=i;j>0&&a[j-1]>temp;j--) a[j]=a[j-1];
a[j]=temp;
if(a==b)
{
flag=1; break;
}
}
if(flag)
{
i++;
if(i<n)
{
temp=b[i];
for(j=i;j>0&&b[j-1]>temp;j--) b[j]=b[j-1];
b[j]=temp;
}
}
}
void merge_sort()
{
int i;
for(i=2;i<=n;i=i*2)
{
for(int j=0;j+i<n;j+=i) sort(s.begin()+j,s.begin()+j+i);
if(n%i) sort(s.begin()+n/i*i,s.begin()+n);
if(s==b) break;
}
i=i*2;
for(int j=0;j+i<n;j+=i) sort(b.begin()+j,b.begin()+j+i);
if(n%i) sort(b.begin()+n/i*i,b.begin()+n);
}
int main(void)
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
s=a;
insert_sort();
if(flag) cout<<"Insertion Sort"<<endl;
else cout<<"Merge Sort"<<endl,merge_sort();
for(int i=0;i<n;i++)
{
cout<<b[i];
if(i+1!=n) cout<<" ";
}
return 0;
}
以上是关于PAT乙级1035 插入与归并 (25 分)的主要内容,如果未能解决你的问题,请参考以下文章