1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| #include<stdio.h> int a[10000], b[10000];
void mergearray(int a[], int first, int mid, int last, int temp[]) { int i = first, j = mid + 1; int k = 0; while(i <= mid && j <= last) { if(a[i] <= a[j]) temp[k++] = a[i++]; else temp[k++] = a[j++]; } while(i <= mid) temp[k++] = a[i++]; while(j <= last) temp[k++] = a[j++]; for(i = 0; i < k; i++) a[first + i] = temp[i]; }
void mergesort(int a[], int first, int last, int temp[]) { if(first < last) { int mid = (first + last) / 2; mergesort(a, first, mid, temp); mergesort(a, mid + 1, last, temp); mergearray(a, first, mid, last, temp); } }
int main() { int n, i; scanf("%d", &n); for(i = 0; i < n; i++) scanf("%d", &a[i]); mergesort(a, 0, n-1, b); for(i = 0; i < n; i++) printf("%d ",a[i]); return 0; }
|