Cod sursa(job #2122906)

Utilizator epermesterNagy Edward epermester Data 5 februarie 2018 17:18:04
Problema Sortare prin comparare Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
using namespace std;

void merge(int kp, int mid, int vp, int *x) {
	int *temp = new int [vp - kp + 1];
	for (int i = 0;i <= vp - kp;++i)
		temp[i] = x[i + kp];
	int i=0, j = (mid-kp)+1, k = kp;
	while (i <= (mid - kp) && j <= (vp - kp)) {
		if (temp[i] < temp[j]) {
			x[k] = temp[i];
			i++;
		}
		else {
			x[k] = temp[j];
			j++;
		}
		k++;
	}
	while (i <= (mid - kp)) {
		x[k] = temp[i];
		i++;k++;
	}
	while (j <= (vp - kp)) {
		x[k] = temp[j];
		j++;k++;
	}
}

void mergeSort(int kp, int vp, int *x) {
	if (kp >= vp) return;
	
	int mid = (vp - kp) / 2 + kp;

	mergeSort(kp, mid, x);
	mergeSort(mid+1, vp, x);

	merge(kp, mid, vp, x);
}

int main() {
	ifstream in("algsort.in");
	ofstream out("algsort.out");
	int n;
	in >> n;
	int *x = new int[n];
	for (int i = 0;i < n;++i)
		in >> x[i];

	mergeSort(0, n - 1, x);

	for (int i = 0;i < n;++i)
		out << x[i] << " ";
}