记录编号 |
231380 |
评测结果 |
AAAAAAAAAA |
题目名称 |
排序测试 |
最终得分 |
100 |
用户昵称 |
皮波Forever |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
6.148 s |
提交时间 |
2016-02-26 11:03:01 |
内存使用 |
9.34 MiB |
显示代码纯文本
#include<iostream>
#include<fstream>
#include<sstream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<cmath>
#include<algorithm>
#define COGS
using namespace std;
void mergesort(int*,int*);
void mergesort(int,int);
int a[2000010],c[2000010],n;
int main(){
#ifdef COGS
freopen("sorttest.in","r",stdin);
freopen("sorttest.out","w",stdout);
#endif
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++)printf("%d ",a[i]);
#ifdef COGS
fclose(stdin);fclose(stdout);
#endif
return 0;
}
void mergesort(int* a,int* b){
if(a==b-1)return;
int size=b-a;
int* mid=a;
//int* mid=(int*)(((int)a+(int)b)>>1);
for(int i=0;i<size>>1;i++)mid++;
printf("a=(int*)%d b=(int*)%d mid=(int*)%d\n*a=%d *(b-1)=%d *mid=%d\n\n\n",(int)a,(int)b,(int)mid,*a,*(b-1),*mid);
getchar();
mergesort(a,mid);
mergesort(mid,b);
int c[size];
int *i=a,*j=mid+1,*k=c;
while(i!=mid&&j!=b){
if(*i<*j){
*k=*i;
i++;
}
else{
*k=*j;
j++;
}
k++;
}
while(i!=mid){
*k=*i;
k++;
i++;
}
while(j!=b){
*k=*j;
k++;
j++;
}
int *l=a,*m=c;
while(l!=b){
*l=*m;
l++;
m++;
}
while(l!=k)delete l++;
}
void mergesort(int s,int t){
int size=t-s+1,mid=(s+t)>>1;
if(s>=t)return;
mergesort(s,mid);
mergesort(mid+1,t);
int i=s,j=mid+1,k=0;
while(i<=mid&&j<=t){
if(a[i]<a[j])c[k]=a[i++];
else c[k]=a[j++];
k++;
}
while(i<=mid)c[k++]=a[i++];
while(j<=t)c[k++]=a[j++];
for(int i=s,j=0;i<=t;i++,j++)a[i]=c[j];
}