Cod sursa(job #2660535)

Utilizator ViAlexVisan Alexandru ViAlex Data 19 octombrie 2020 17:51:24
Problema Sortare prin comparare Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include<iostream>
#include<fstream>
using namespace std;

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

void mrg(int*a,int l1,int*b,int l2,int*c){//merges a and b into c

	int x=0,y=0,cursor=0;
	while(x<l1 || y<l2){
		if(x==l1){
			c[cursor++]=b[y];
			y++;
		}
		else if(y==l2){
			c[cursor++]=a[x];
			x++;
		}
		else{
			if(a[x]<b[y]){
				c[cursor++]=a[x];
				x++;
			}
			else{
				c[cursor++]=b[y];
				y++;
			}
		}

	}
}


void srt(int*arr,int l,int r){
	if(l>=r){
		return;
	}

	int result[r-l+1];
	int middle=(l+r)/2;
	srt(arr,l,middle);
	srt(arr,middle+1,r);

	mrg(arr+l,middle-l+1,arr+middle+1,r-middle,result);

	for(int i=l;i<=r;i++){
		arr[i]=result[i-l];
	}
}

int v[500000],num_values;

void read(){
	in>>num_values;
	for(int i=0;i<num_values;i++)
		in>>v[i];
}

void solve(){
	srt(v,0,num_values-1);
	for(int i=0;i<num_values;i++)
		out<<v[i]<<" ";
}


int main(){
	read();
	solve();
	return 0;
}