Pagini recente » Cod sursa (job #3294628) | Cod sursa (job #1246226) | Cod sursa (job #835061) | Cod sursa (job #2687074) | Cod sursa (job #2931053)
#include <bits/stdc++.h>
#define N 500005
using namespace std;
ifstream f("algsort.in");
ofstream g("algsort.out");
int n;
int arr[N];
void read() {
f>>n;
for(int i = 1;i <= n;++i) {
f>>arr[i];
}
}
void merge(int left, int mid, int right) {
int len_l = mid - left + 1, len_r = right - mid;
int l[mid - left + 1];
int r[right - mid];
for(int i = left;i <= mid;++i) {
l[i - left] = arr[i];
}
for(int i = mid + 1;i <= right;++i) {
r[i - mid - 1] = arr[i];
}
int pos_l = 0, pos_r = 0, pos_arr = left;
while(pos_l < len_l && pos_r < len_r) {
if(l[pos_l] < r[pos_r]) {
arr[pos_arr] = l[pos_l];
++pos_l;
} else {
arr[pos_arr] = r[pos_r];
++pos_r;
}
++pos_arr;
}
while(pos_l < len_l) {
arr[pos_arr] = l[pos_l];
++pos_arr;
++pos_l;
}
while(pos_r < len_r) {
arr[pos_arr] = r[pos_r];
++pos_arr;
++pos_r;
}
}
void mergeSort(int left, int right) {
if(left < right) {
int mid = (left + right) >> 1;
mergeSort(left, mid);
mergeSort(mid + 1, right);
merge(left, mid, right);
}
}
void solve() {
mergeSort(1, n);
for(int i = 1;i <= n;++i) {
g<<arr[i]<<" ";
}
}
int main() {
read();
solve();
return 0;
}