PAT-1025.插入与归并(25)

30 篇文章 0 订阅
29 篇文章 0 订阅
#include<iostream>
#include<algorithm>
using namespace std;
int N;
int inser(int i,int A[],int B[]);

int main()
{
  int A[100],B[100],C[100];
  int i,j,k,temp; 
  cin>>N;
  for(i=0;i<N;i++)
  {cin>>A[i];C[i]=A[i];}
  for(i=0;i<N;i++)
 cin>>B[i];

  for(i=1;i<N;i++)
  {
sort(A,A+i);
 if(inser(i,A,B))
 {
cout<<"Insertion Sort"<<endl;
 for(j=0;j<N-1;j++)
       cout<<A[j]<<" ";
     cout<<A[j];
 break;
 }
  }
  
  if(i==N&&N!=0)
  {
 cout<<"Merge Sort"<<endl;
 temp=2;
 while(1)
 {
 for(i=0;i<N;i=i+temp)
 {
     if(i+temp<=N)
 sort(C+i,C+i+temp);
 else
 {sort(C+i,C+N);break;}
 }
    temp*=2;
for(j=0;j<N;j++)
if(C[j]!=B[j])
break;
if(j==N)
{
for(i=0;i<N;i=i+temp)
{
if(i+temp<=N)
sort(C+i,C+i+temp);
else
{sort(C+i,C+N);break;}
}
for(i=0;i<N-1;i++)
cout<<C[i]<<" ";
cout<<C[i];
break;
}
 } 
  }

return 0;
}


int inser(int i,int A[],int B[])
{
int j;
for(j=0;j<N;j++)
if(A[j]!=B[j])
break;
if(j==N)
{
i++;
  sort(A,A+i);
inser(i,A,B);
return 1;
}
return 0;

}

/********************************************************/

将数组先分步进行插入排序,若产生的新数组和输入的样例数组相同,则在进行一步插入排序,输出数组。当排序完全之后还是无法和样例匹配上则为归并排序。

归并排序要特别注意数组最后一段的归并,若是比此时要归并的数段小,则将剩下的全排,不分类判断的话会有可能造成数组越界导致段错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值