#include <string.h>
#include <stdio.h>
#include <vector>
#include <queue>
#include <algorithm>
#include <map>
#include <string>
#include <iostream>
#include <math.h>
using namespace std;
int A[110],B[110],C[110];
int N;
bool judge(int A[],int B[])
{
for(int i=1;i<=N;i++)
{
if(A[i]!=B[i])
return false;
}
return true;
}
void downshift(int low,int high)
{
int i=low,j=2*i;
while(j<=high)
{
if(j+1<=high&&B[j+1]>B[j])
{
j+=1;
}
if(B[j]>B[i])
{
swap(B[j],B[i]);
i=j;
j=i*2;
}
else
{
break;
}
}
}
void create()
{
for(int i=N/2;i>=1;i--)
{
downshift(i,N);
}
}
void headsort()
{
bool flag=false;
for(int i=N;i>=1;i--)
{
swap(B[1],B[i]);
downshift(1,i-1);
if(judge(B,C))
{
swap(B[1],B[i-1]);
downshift(1,i-2);
printf("Heap Sort\n");
for(int i=1;i<=N;i++)
{
if(i!=1)printf(" ");
printf("%d",B[i]);
}
break;
}
}
}
int main()
{
scanf("%d",&N);
for(int i=1;i<=N;i++)
{
scanf("%d",&A[i]);
}
for(int i=1;i<=N;i++)
{
B[i]=A[i];
}
for(int i=1;i<=N;i++)
{
scanf("%d",&C[i]);
}
int step=1;
bool flag=false;
while(step<=N)
{
sort(A+1,A+1+step);
if(judge(A,C)&&step!=1)
{
step++;
sort(A+1,A+1+step);
printf("Insertion Sort\n");
for(int i=1;i<=N;i++)
{
if(i!=1)printf(" ");
printf("%d",A[i]);
}
flag=true;
break;
}
step++;
}
if(!flag)
{
create();
headsort();
}
return 0;
}
PAT甲1098 Insertion or Heap Sort(25 分)
最新推荐文章于 2022-03-24 22:15:50 发布