Pagini recente » Cod sursa (job #2714131) | Cod sursa (job #556430) | Cod sursa (job #2844972) | Cod sursa (job #2155736) | Cod sursa (job #1215538)
#include <iostream>
#include <fstream>
using namespace std;
int aux[500010];
void swap (int &a, int &b)
{
int aux = a;
a = b;
b = aux;
}
void interclasare (int v[], int st, int dr)
{
int mid = (st + dr) / 2;
int i = st, j = mid + 1, ind = 0;
while (i <= mid && j <= dr)
{
if (v[i] < v[j])
{
aux[ind] = v[i];
++i;
++ind;
}
else
{
aux[ind] = v[j];
++j;
++ind;
}
}
/*if (i <= mid)
{
for (j = i; j <= mid; ++j)
{
aux[ind] = v[j];
++ind;
}
}
else
{
for (i = j; i <= dr; i++)
{
aux[ind] = v[i];
++ind;
}
}*/
while (i <= mid)
aux[ind++] = v[i++];
while (j <= dr)
aux[ind++] = v[j++];
for (i = st, j = 0; i <= dr; ++i, ++j)
v[i] = aux[j];
}
void mergeSort (int v[], int st, int dr)
{
if (dr - st <= 1)
{
if (v[st] > v[dr])
swap(v[st], v[dr]);
return;
}
int mid = (st + dr) / 2;
mergeSort(v, st, mid);
mergeSort(v, mid + 1, dr);
interclasare(v, st, dr);
}
int main()
{
ifstream in("algsort.in");
int n, i, *v;
in >> n;
v = new int[n];
for (i = 0; i < n; i++)
in >> v[i];
in.close();
mergeSort(v, 0, n - 1);
ofstream out("algsort.out");
for (i = 0; i < n; i++)
out << v[i] << " ";
out.close();
return 0;
}