Pagini recente » Articole | Cod sursa (job #2254549) | Monitorul de evaluare | Istoria paginii utilizator/denis_furtuna | Cod sursa (job #1797769)
#include <iostream>
#include <stdio.h>
using namespace std;
int A[500000];
int n;
void citire(){
cin >> n;
for(int i=0; i<n; i++)
cin >> A[i];
}
void afis(int A[], int n){
for(int i=0; i<n; i++)
cout << A[i] << " ";
cout << endl;
}
void Merge(int *&M, int st, int dr, int m){
int n1 = m-st+1;
int n2 = dr-m;
int S1[n1], S2[n2];
for(int i=0; i<n1; i++)
S1[i] = A[i+st];
for(int i=0; i<n2; i++)
S2[i] = A[i+m+1];
int cnt = st;
int i=0;
int j=0;
while(i < n1 && j < n2 ){
if(S1[i] < S2[j]){
A[cnt] = S1[i];
i++;
}
else{
A[cnt] = S2[j];
j++;
}
cnt++;
}
while(i<n1){
A[cnt] = S1[i];
i++;
cnt++;
}
while(j<n2){
A[cnt] = S2[j];
j++;
cnt++;
}
}
void mergeSort(int A[], int st, int dr){
if(st>=dr)
return;
int m = (st+dr)/2;
mergeSort(A, st, m);
mergeSort(A, m+1, dr);
Merge(A, st, dr, m);
}
int main(){
freopen("algsort.in","r", stdin);
freopen("algsort.out","w", stdout);
citire();
mergeSort(A, 0, n-1);
afis(A, n);
return 0;
}