1089. Insert or Merge (25)

来源:互联网 发布:怎么在淘宝商城开店 编辑:程序博客网 时间:2024/05/16 16:59

1089. Insert or Merge (25)
注:存在等值数据

#include <stdio.h>#include <stdlib.h>int n,b[101],a[101];int comp(const void*a,const void*b){    return *((int*)a)-*((int*)b);}int juge(int s,int e){    if(s>=e)return 1;    while(s<e&&a[s]<a[s+1])++s;    return s==e;}int main(){    scanf("%d",&n);    for(int i=1;i<=n;++i)        scanf("%d",&b[i]);    for(int i=1;i<=n;++i)        scanf("%d",&a[i]);    int step=2,ismerge=0;    while(1)    {        int s=1;        while(s+step-1<=n&&juge(s,s+step-1))            s+=step;        if(s+step-1<=n)break;        if(juge(s,n)&&step==2)            ismerge=1;        step*=2;    }    if(ismerge)    {        printf("Merge Sort\n");        int i=1;        while(i+step-1<=n)        {            qsort(&a[i],step,sizeof(int),comp);            i+=step;        }        if(i<=n)            qsort(&a[i],n-i+1,sizeof(int),comp);    }    else    {        printf("Insertion Sort\n");        int i=1,k;        while(i<n&&a[i]<=a[i+1])++i;        qsort(&a[1],i+1,sizeof(int),comp);    }    for(int i=1;i<=n;++i)    {        printf("%d",a[i]);        if(i!=n)printf(" ");    }    return 0;}
0 0
原创粉丝点击