Pagini recente » Cod sursa (job #1538850) | Cod sursa (job #1200368) | Cod sursa (job #2136701) | Cod sursa (job #2656858) | Cod sursa (job #1013110)
#include <cstdio>
const int nmax = int(5e5);
int n;
int a[nmax], b[nmax];
void readData() {
scanf("%d",&n);
for(int i = 0;i < n;i++) {
scanf("%d",&a[i]);
}
}
inline void swap(int &a,int &b) {
int tmp = a;
a = b;
b = tmp;
}
void mergeSort(int left,int right) {
if(right - left + 1 < 3) {
if(right - left + 1 == 2 && a[left] > a[right]) {
swap(a[left],a[right]);
}
return;
}
int mid = (left + right)>>1;
mergeSort(left,mid);
mergeSort(mid + 1,right);
for(int i = left, j = mid + 1, k = 0;i <= mid || j <= right;k++) {
b[k] = (j > right || (i <= mid && a[i] < a[j])) ? a[i++] : a[j++];
}
for(int i = left;i <= right;i++) {
a[i] = b[i - left];
}
}
void printData() {
for(int i = 0;i < n;i++) {
printf("%d ",a[i]);
}
printf("\n");
}
int main()
{
freopen("algsort.in","r",stdin);
freopen("algsort.out","w",stdout);
readData();
mergeSort(0,n - 1);
printData();
return 0;
}