Pagini recente » Cod sursa (job #2862058) | Cod sursa (job #2765259) | Cod sursa (job #1017913) | Cod sursa (job #973146) | Cod sursa (job #2901335)
#include <bits/stdc++.h>
using namespace std;
ifstream in("algsort.in");
ofstream out("algsort.out");
int n, v[500001], aux[500001];
void merge(int v[], int s, int d, int mid)
{
int p = s, q = mid + 1, k = 1;
while(p <= mid && q <= d)
if(v[p] <= v[q])
aux[k++] = v[p++];
else if(v[p] > v[q])
aux[k++] = v[q++];
if(p <= mid){
for(q = p;q <= mid; q++)
aux[k++] = v[q];
}
else{
for(p = q;p <= d; p++)
aux[k++] = v[p];
}
k = 1;
for(int u = s; u <= d; u++)
v[u] = aux[k++];
}
void MergeSort(int v[], int s, int d)
{
if((d - s) <= 1){
if(v[s] > v[d])
swap(v[s], v[d]);
}
else{
int mid = (s + d)/2;
MergeSort(v, s, mid);
MergeSort(v, mid + 1, d);
merge(v, s, d, mid);
}
}
int main(){
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] << ' ';
in.close();
out.close();
return 0;
}