Pagini recente » Monitorul de evaluare | Cod sursa (job #2638813) | Cod sursa (job #1288974) | Cod sursa (job #2030815) | Cod sursa (job #1042547)
#include <fstream>
using namespace std;
ifstream in ("algsort.in");
ofstream out ("algsort.out");
int V[500005], P[500005];
void interclasare (int st, int mid, int dr){
int poz1 = st;
int poz2 = mid + 1;
int k = 1;
while (poz1 <= mid && poz2 <= dr)
if (V[poz1] <= V[poz2])
{
P[k] = V[poz1];
k++;
poz1++;
}
else
{
P[k] = V[poz2];
k++;
poz2++;
}
while (poz1 <= mid){
P[k] = V[poz1];
k++;
poz1++;
}
while (poz2 <= dr){
P[k] = V[poz2];
poz2++;
k++;
}
for (int i = st; i <= dr; i++)
V[i] = P[i - st + 1];
}
void margesort (int st, int dr){
int mid = st + (dr - st) / 2;
if (dr > st){
margesort (st, mid);
margesort (mid+1, dr);
interclasare (st, mid, dr);
}
}
int main()
{
int n, i;
in >> n;
for (i = 1; i <= n; i++)
in >> V[i];
margesort (1, n);
for (i = 1; i <= n; i++)
out << V[i] << " ";
return 0;
}