美文网首页
1035 插入与归并 (25 分)

1035 插入与归并 (25 分)

作者: 79d12e22ec53 | 来源:发表于2019-05-19 15:27 被阅读0次
#include<stdio.h>
int cmp(const void *a, const void *b)
{
    return *(int*)a - *(int*)b;
}
int isInsertionSort(int a[101], int b[101], int N)
{
    int i, len, flag;
    for(i=N-1; i>=0; i--)
    {
        if(a[i] != b[i])
        {
            len = i;
            break;
        }
    }
    for(i=1; i<=len; i++)
    {
        if(b[i] < b[i-1])
        {
            flag = 0;
            break;
        }
        else
            flag = 1;
    }

    return flag;

}

void InsertionSort(int a[101], int b[101], int N)
{
    int i, flag;
    for(i=N-1; i>=0; i--)
    {
        if(a[i] != b[i])
        {
            flag = i;
            break;
        }
    }

    for(i=1; i<=flag+1; i++)
    {
        int j = i;
        int temp;
        while(j>0 && b[j] < b[j-1])
        {
            temp = b[j];
            b[j] = b[j-1];
            b[j-1] = temp;
            j--;
        }
    }
    printf("Insertion Sort\n");
    for(i=0; i<N; i++)
    {
        printf("%d", b[i]);
        if(i<N-1)
            printf(" ");
    }
    //printf("aaa");

}

void MergeSort(int b[101], int N)
{
    printf("Merge Sort\n");
    int i,j,k;
    int kuai=1, flag=0;
    for(i=0; i<N; i++)
    {
        kuai *=2;
        for(j=0; j<N; j=j+kuai)
        {
            for(k=0; k<kuai; k++)
            {
                if(b[k] < b[k-1])
                {
                    //kuai = kuai / 2;
                    flag = 1;
                    break;
                }
            }
            if(flag)
                break;
        }
        if(flag)
            break;
    }
    //printf("%d\n", kuai);
    kuai*=2;
    int x = N/kuai;
    for(i=0; i<x; i++)
        qsort(&b[i*kuai],kuai,sizeof(int),cmp);
    for(i=0; i<N; i++)
    {
        printf("%d", b[i]);
        if(i<N-1)
            printf(" ");
    }

}

int main()
{
    int N, i, flag;
    int a[101], b[101];
    char c[20];
    scanf("%d", &N);

    for(i=0; i<N; i++)
        scanf("%d", &a[i]);
    for(i=0; i<N; i++)
        scanf("%d", &b[i]);
    if(isInsertionSort(a, b, N))
        InsertionSort(a, b, N);
    else
        MergeSort(b, N);



}

相关文章

网友评论

      本文标题:1035 插入与归并 (25 分)

      本文链接:https://www.haomeiwen.com/subject/lbkqzqtx.html