Cod sursa(job #1814477)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 24 noiembrie 2016 03:28:04
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>
using namespace std;

int* merge(int* a,int sizeA,int* b,int sizeB){
	int* result=(int*)malloc((sizeB+sizeA)*sizeof(int));

	int pa=0,pb=0,pos=-1;
	
	while (pa<sizeA||pb<sizeB){
		if (pa==sizeA){
			result[++pos]=b[pb];
			++pb;
		} else {
			if (pb==sizeB){
				result[++pos]=a[pa];
				++pa;
			} else {
				if (a[pa]<b[pb]){
					result[++pos]=a[pa];
					++pa;
				} else {
					result[++pos]=b[pb];
					++pb;
				}
			}
		}

	}

	return result;
}

void merge_sort(int* a,int sizeA){
	//cout<<sizeA<<"\n";
	if (sizeA==1) return;
	merge_sort(a+sizeA/2,sizeA/2+sizeA%2);
	merge_sort(a,sizeA/2);

	int* aux=merge(a+sizeA/2,sizeA/2+sizeA%2,a,sizeA/2);
	memcpy(a,aux,sizeA*sizeof(int));
	
	free(aux);
}


ifstream f("algsort.in");
ofstream g("algsort.out");

int main(){

	int n;
	f>>n;
	int* a=(int*)malloc(n*sizeof(int));
	for(int i=0;i<n;++i) f>>a[i];
	//merge_sort(a,n);

		sort(a,a+n);

	for(int i=0;i<n;++i)
		g<<a[i]<<" ";

	return 0;
}