Cod sursa(job #2158953)

Utilizator VladTiberiuMihailescu Vlad Tiberiu VladTiberiu Data 10 martie 2018 17:22:57
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <stdio.h>
#include <stdlib.h>

#define DIM 10000
char buffer[DIM];
int poz = 0;

#define NMax 500003

typedef struct {
	int x;
}POINT;

POINT a[NMax];
int n;

POINT v[NMax];
void merge_sort(POINT a[], int lo, int hi) {
	if (lo == hi) {
		return;
	}
	int mid = (lo + hi) / 2;
	merge_sort(a, lo, mid);
	merge_sort(a, mid + 1, hi);

	int nr = 0;
	int l = lo, r = mid + 1;

	while (l <= mid && r <= hi) {
		if (a[l].x < a[r].x) {
			v[++nr] = a[l];
			++l;
		}
		else {
			v[++nr] = a[r];
			++r;
		}
	}
	while (l <= mid) {
		v[++nr] = a[l];
		++l;
	}
	while (r <= hi) {
		v[++nr] = a[r];
		++r;
	}
	int i,t;
	for (i = lo, t = 1; i <= hi; ++i) {
		a[i] = v[t++];
	}
}

int main() {
    freopen("algsort.in","r",stdin);
    freopen("algsort.out","w",stdout);

	scanf("%d", &n);
	for (int i = 1; i <= n; ++i) {
		scanf("%d",&a[i].x);
	}

	merge_sort(a, 1, n);
	for(int i = 1; i <= n; ++i){
        printf("%d ",a[i].x);
	}
	return 0;
}