PAT甲1098. Insertion or Heap Sort (25)

初始序列不参与比较……

#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;
}

猜你喜欢

转载自blog.csdn.net/yhy489275918/article/details/80186891