Pagini recente » Cod sursa (job #114415) | Cod sursa (job #1083068) | Cod sursa (job #596032) | Cod sursa (job #2360161) | Cod sursa (job #2943020)
//mergesort
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin ("algsort.in");
ofstream fout ("algsort.out");
#define MAX_n 500000
int v[MAX_n];
int interclas[MAX_n];
void interclasare (int left, int mid, int right)
{
int i = left, j = mid + 1, poz = 0;
while(i <= mid && j <= right)
{
if(v[i] < v[j])
interclas[poz++] = v[i++];
else
interclas[poz++] = v[j++];
}
while (i <= mid)
interclas[poz++] = v[i++];
while (j <= right)
interclas[poz++] = v[j++];
for(i = 0; i < poz; i ++)
v[left + i] = interclas[i];
}
void mergesort(int left, int right)
{
if(left >= right) return;
int mid = (left + right) / 2;
mergesort (left, mid);
mergesort (mid + 1, right);
interclasare(left, mid, right);
}
int main()
{
int n;
fin >> n;
for(int i = 0; i < n; ++i)
{
fin >> v[i];
}
mergesort(0, n - 1);
for(int i = 0; i < n; ++i)
{
fout << v[i] << " ";
}
return 0;
}