初始序列不参与比较……
#include <cstdio>
#include <cstdlib>
#include <math.h>
#include <algorithm>
using namespace std;
int a[110],b[110],result[110],N;
void downA(int low,int high)
{
int i=low,j=i*2;
while(j<=high)
{
if(j+1<=high&&b[j+1]>b[j])
{
j=j+1;
}
if(b[j]>b[i])
{
swap(b[j],b[i]);
i=j;
j=i*2;
}
else
{
break;
}
}
}
void createheap()
{
for(int i=N/2;i>=1;i--)
{
downA(i,N);
}
}
bool cmp(int a[],int result[])
{
for(int i=1;i<=N;i++)
{
if(a[i]!=result[i])
{
return false;
}
}
return true;
}
int main()
{
scanf("%d",&N);
bool ins=false;
for(int i=1;i<=N;i++)
{
scanf("%d",&a[i]);
b[i]=a[i];
}
for(int i=1;i<=N;i++)
{
scanf("%d",&result[i]);
}
int num;
if(cmp(a,result))
{
ins=true;
for(int i=1;i<=N;i++)
{
sort(a+1,a+i);
if(!cmp(a,result))
{
break;
}
}
}
else
{
for(num=1;num<=N;num++)
{
sort(a+1,a+num);
if(cmp(a,result))
{
ins=true;
break;
}
}
if(ins)
{
sort(a+1,a+num+1);
}
}
if(ins)
{
printf("Insertion Sort\n");
for(int i=1;i<=N;i++)
{
printf("%d",a[i]);
if(i!=N)
printf(" ");
}
}
else
{
printf("Heap Sort\n");
createheap();
num=0;
int j;
for(j=N;j>1;j--)
{
swap(b[j],b[1]);
downA(1,j-1);
num++;
if(cmp(b,result))
{
break;
}
}
swap(b[j-1],b[1]);
downA(1,j-2);
for(int i=1;i<=N;i++)
{
printf("%d",b[i]);
if(i!=N)
printf(" ");
}
}
system("pause");
return 0;
}