結果

提出番号 373
提出者 kim
言語 C++
提出日時 2017-07-15 15:53:45
問題名 (20)ソートするだけ
結果 AC
点数 100%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 AC 100% 1ms 8336KB
2 AC 100% 2ms 8112KB
3 AC 100% 15ms 8320KB
4 AC 100% 37ms 7968KB
5 AC 100% 1ms 8208KB

ソースコード

#include <cstdio>
#include <vector>
using namespace std;

void merge(vector<int>& A, int left, int mid, int right) {
	int i,j,k;
	int n1=mid-left;
	int n2=right-mid;
	vector<int> L, R;
	L.resize(n1+1);
	R.resize(n2+1);
	for(i=0; i<n1; ++i) {
		L[i]=A[left+i];
	}
	for(i=0; i<n2; ++i) {
		R[i]=A[mid+i];
	}
	L[n1]=1000000001;
	R[n2]=1000000001;
	i=j=0;
	for(k=left; k<right; ++k) {
		if(L[i]<=R[j]) {
			A[k]=L[i];
			++i;
		} else {
			A[k]=R[j];
			++j;
		}
	}
	return;
}

void mergeSort(vector<int>&A, int left, int right) {
	if(left+1<right) {
		int mid=left+(right-left)/2;
		mergeSort(A,left,mid);
		mergeSort(A,mid,right);
		merge(A,left,mid,right);
	}
	return;
}

int main() {
	vector<int> A;
	int n;
	int i;
	scanf("%d",&n);
	A.resize(n);
	for(i=0; i<n; ++i) {
		scanf("%d", &A[i]);
	}
	mergeSort(A,0,n);
	for(i=0; i<n-1; ++i) {
		printf("%d ",A[i]);
	}
	printf("%d\n",A[n-1]);
	return 0;
}