poj 2299 Ultra-QuickSort

来源:互联网 发布:vscode react 编辑:程序博客网 时间:2024/06/06 01:24


此题是一道排序题,但是数据量大,即使时间长,用冒泡之类的同样会超时,此时接触了,归并排序,用到分治思想。。。


代码:

#include<stdio.h>#include<string.h>int num[500002];int nl[500003];int nr[500002];long long t;void compute(int top,int mid,int end){    for(int i=top; i<=mid; i++)        nl[i]=num[i];    nl[mid+1]=0x7ffffff;    for(int i=mid+1; i<=end; i++)        nr[i]=num[i];    nr[end+1]=0x7ffffff;    int p=top;    int q=mid+1;    for(int i=top; i<=end; i++)        if(nl[p]<=nr[q])        {            num[i]=nl[p++];        }        else        {            num[i]=nr[q++];            t+=(mid-p+1);        }}void msort(int top,int end){    if(top<end)    {        int mid=(top+end)/2;        msort(top,mid);        msort(mid+1,end);        compute(top,mid,end);    }}int main(){    int n;    while(scanf("%d",&n),n)    {        t=0;        for(int i=1; i<=n; i++)            scanf("%d",&num[i]);        msort(1,n);        printf("%lld\n",t);    }    return 0;}


0 0
原创粉丝点击