ZCMU - 2149: wjw的排序问题

简介: ZCMU - 2149: wjw的排序问题

题目链接


题目大意:略。

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

AC 代码

#include<bits/stdc++.h>
#include<cmath>
#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<k;i++) a[first+i]=tmp[i];
}
void mergeSort(int first, int last)
{
    if(first<last)
    {
        int mid=first+((last-first)>>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<n;i++)
            scanf("%d",&a[i]);
        mergeSort(0,n-1);
        for(int i=0;i<n;i++)
        {
            if(i==0) printf("%d",a[i]);
            else printf(" %d",a[i]);
        }
        puts("");
    }
    return 0;
}
目录
相关文章
|
算法 搜索推荐 调度
排序的介绍
排序的介绍
|
3月前
排序1
排序1
18 0
|
算法 搜索推荐
排序篇(六)----排序小结
排序篇(六)----排序小结
47 0
|
搜索推荐
排序进行曲-v1.0
排序进行曲-v1.0
|
算法 搜索推荐
排序(详解)中
排序(详解)
74 0
|
算法 搜索推荐
排序(详解)上
排序(详解)
72 0
|
搜索推荐
7-207 排序
7-207 排序
61 0
|
存储 缓存 算法