#include #include using namespace std; const int nMax = 500005; int n; int v[nMax]; void citire() { ifstream in("algsort.in"); in >> n; for(int i = 1; i <= n; ++i) in >> v[i]; in.close(); } void merge_sort(int st, int dr) { static int a[nMax]; if(st == dr) return; int mid = (st + dr) / 2; merge_sort(st, mid); merge_sort(mid + 1, dr); for(int i = st; i <= dr; ++i) a[i] = v[i]; int ind1 = st; int ind2 = mid + 1; int i; for(i = st; i <= dr && ind1 <= mid && ind2 <= dr; ++i) { if(a[ind1] < a[ind2]) v[i] = a[ind1++]; else v[i] = a[ind2++]; } while(ind1 <= mid) v[i++] = a[ind1++]; while(ind2 <= dr) v[i++] = a[ind2++]; } void afisare() { ofstream out("algsort.out"); for(int i = 1; i <= n; ++i) out << v[i] << " "; out.close(); } int main() { citire(); merge_sort(1, n); afisare(); return 0; }