Cod sursa(job #1020626)

Utilizator mr.johnFMI - Laceanu Ionut-Adrian mr.john Data 2 noiembrie 2013 13:43:29
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int lungime, x;

int afisare(vector<int>& numere, ofstream& fout) {
	for (vector<int>::iterator numar = numere.begin(); numar != numere.end(); ++numar) {
		fout << *numar << " " ;
	}
	return 0;
}


int swap (int& a, int& b) {
	int temp = a;
	a = b;
	b = temp;
	return 0;
}

int merge(vector<int>& numere, int begin, int middle, int end) {
	vector<int> temporar;
	int temp;
	int first = begin;
	int second = middle + 1;
	while(first <= middle || second <= end) {
	    if (second > end || (first <= middle && numere[first] <= numere[second])) {
	    	temporar.push_back(numere[first++]);
	    }
	    else {
	    	temporar.push_back(numere[second++]);
	    }
	}
	for (int i = 0; i <= end - begin; i++) {
		numere[begin + i] = temporar[i];
	}
	return 0;
}

int merge_sort(vector<int>& numere, int begin, int end) {
	if (begin == end) {
		return 0;
	}
	int middle = (end-begin) / 2 + begin;
	merge_sort(numere, begin, middle);
	merge_sort(numere, middle+1, end);
	merge(numere, begin, middle, end);
	return 0;
}

int main(int argc, char const *argv[]) {
	vector<int> numere;
	ifstream fin("algsort.in");
	ofstream fout("algsort.out");
	fin >> lungime;
	for (int i = 0; i < lungime; i++)	{
		fin >> x;
		numere.push_back(x);
	}
	merge_sort(numere, 0, lungime-1);
	afisare(numere, fout);
}