Pagini recente » Cod sursa (job #629315) | Cod sursa (job #399020) | Cod sursa (job #696605) | Cod sursa (job #2522790) | Cod sursa (job #3214267)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
const int MAX = 500000;
int v[MAX+1], vec[MAX+1];
void mergesort(int a[], int left, int right)
{
if(left==right) // Un singur element, deci "vectorul" format din acest singur element este sortat
return; // Ne intoarcem
int mij=(left+right)/2; //mijlocul vectorului
mergesort(a, left, mij); //sortam stanga
mergesort(a, mij+1, right); //sortam dreapta
//interclasare
int i=left, j=mij+1, k=0;
while(i<=mij && j<=right)
if(a[i]<a[j])
vec[++k]=v[i++];
else
vec[++k]=a[j++];
while(i<=mij)
vec[++k]=v[i++];
while(j<=right)
vec[++k]=a[j++];
for(i=left, j=1; i<=right; i++, j++)
a[i]=vec[j];
}
int main()
{
int n;
in>>n;
for(int i=0; i<n; ++i)
in>>v[i];
mergesort(v, 0, n-1);
for(int i=0; i<n; ++i)
out<<v[i]<<" ";
return 0;
}