Pagini recente » Cod sursa (job #2529210) | Cod sursa (job #2752397) | Cod sursa (job #1053599) | Cod sursa (job #1376332) | Cod sursa (job #2744701)
#include <iostream>
using namespace std;
#define NMAX 100005
//long long total = 0;
void Merge(int left1, int right1, int left2, int right2, int *v) {
int i = left1, j = left2, temp[NMAX], c = 0, c2 = 0;
while(i <= right1 && j <= right2)
if(v[i] <= v[j])
temp[++c] = v[i++];
else {
temp[++c] = v[j++];
//total += right1 - i + 1;
}
while(i <= right1)
temp[++c] = v[i++];
while(j <= right2)
temp[++c] = v[j++];
for(i = left1; i <= right2; ++i)
v[i] = temp[++c2];
}
void MergeSort(int left, int right, int *v) {
if(left < right) {
int m = left + (right - left) / 2;
MergeSort(left, m, v);
MergeSort(m+1, right, v);
Merge(left, m, m+1, right, v);
}
}
int main() {
freopen("algsort.in", "r", stdin);
freopen("algsort.out", "w", stdout);
int n, i, v[NMAX];
cin >> n;
for(i = 1; i <= n; ++i)
cin >> v[i];
MergeSort(1, n, v);
//cout << total;
for(i = 1; i <= n; ++i)
cout << v[i] << ' ';
}