记录编号 231380 评测结果 AAAAAAAAAA
题目名称 排序测试 最终得分 100
用户昵称 Gravatar皮波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];
}