ZCMU - 2149: wjw的排序问题

题目链接:点击打开链接


题目大意:略。


解题思路:快速排序对排序好的或相等的元素进行排序会形成单枝树,很慢,这时用归并排序


AC 代码

#include
#include

#define mem(a,b) memset(a,b,sizeof a);

using namespace std;

typedef long long ll;

const int maxn=3e6+1000;

int a[maxn],tmp[maxn];

void mergeArr(int first,int mid,int last)
{
    int i=first, j=mid+1;
    int m=mid, n=last, k=0;

    while(i<=m && j<=n)
        if(a[i]<=a[j]) tmp[k++]=a[i++];
        else tmp[k++]=a[j++];

    while(i<=m) tmp[k++]=a[i++];
    while(j<=n) tmp[k++]=a[j++];

    for(i=0;i>1); // >> 优先级低于 + -
        mergeSort(first,mid);
        mergeSort(mid+1,last);
        mergeArr(first,mid,last);
    }
}

int main()
{
    int n;
    while(~scanf("%d",&n))
    {
        for(int i=0;i

你可能感兴趣的:(#,ACM,#,ZCMU,#,排序)