Cod sursa(job #2231048)

Utilizator mihaimusat.1998Musat Mihai-Robert mihaimusat.1998 Data 12 august 2018 19:32:08
Problema Sortare prin comparare Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>
#include <vector>

#define nmax 500000

using namespace std;

vector<int> v;

void merge_halves(int left,int right)
{
    vector<int>aux;
	int mid=(left+right)/2;
	int i=left,j=mid+1;
	while (i<=mid && j<=right) {
		if (v[i]<=v[j]) {
			aux.push_back(v[i]);
			i++;
		}
        else {
            aux.push_back(v[j]);
            j++;
        }
	}
	while (i<=mid) {
		aux.push_back(v[i]);
		i++;
	}
	while (j<=right) {
		aux.push_back(v[j]);
		j++;
	}

	for (int k=left;k<=right;k++) {
		v[k]=aux[k-left];
	}
}

void merge_sort(int left,int right) {
	if (left>=right) return;
	int mid=(left+right)/2;
	merge_sort(left,mid);
	merge_sort(mid+1,right);
	merge_halves(left,right);
}

int main()
{
    ifstream fin("algsort.in");
    ofstream fout("algsort.out");

    int n;

    fin>>n;
    for(int i=0;i<n;i++) {
        int a;
        fin>>a;
        v.push_back(a);
    }

    merge_sort(0,v.size()-1);

    for(int i=0;i<n;i++)
        fout<<v[i]<<" ";

    fin.close();
    fout.close();

	return 0;
}