Pagini recente » Cod sursa (job #798878) | Cod sursa (job #2400707) | Cod sursa (job #2839541) | Cod sursa (job #423311) | Cod sursa (job #1893986)
//MergeSort
#include<fstream>
#include<vector>
#include<string>
#define modulo 666013
using namespace std;
ifstream fin("algsort.in");
ofstream fout("algsort.out");
string sir;
int i, n, k, j,contor,st,dr,sol,x,y;
int a[500005];
void merge(int a[], int stanga, int mij, int dreapta)
{
int b[500005];
int x , y , k;
k = stanga;
x = stanga;
y = mij + 1;
while(x <= mij && y <= dreapta)
{
if(a[x] < a[y])
{
b[k++] = a[x];
x++;
}
else if(a[y] < a[x])
{
b[k++] = a[y];
y++;
}
else
{
b[k++] = a[x];
b[k++] = a[y];
x++;
y++;
}
}
while(x <= mij)
{
b[k++] = a[x];
x++;
}
while(y <= dreapta)
{
b[k++] = a[y];
y++;
}
for(i = stanga; i <= dreapta; i++)
{
a[i] = b[i];
}
}
void mergeSort(int a[], int stanga, int dreapta)
{
if(stanga < dreapta)
{
int mij = (stanga + dreapta) / 2;
mergeSort(a, stanga, mij);
mergeSort(a, mij + 1, dreapta);
merge(a, stanga, mij, dreapta);
//fout << stanga << " " << dreapta << "\n";
}
}
int main()
{
fin >> n;
for(i = 1; i <= n; i++)
{
fin >> a[i];
}
mergeSort(a, 1, n);
for(i = 1; i <= n; i++)
{
fout << a[i] << " ";
}
}