voidmerge(int a[], int l, int r, int mid)//并的思想 { int *aux = newint[r - l + 1], i, j, k; for (k = l; k <= r; k++) aux[k - l] = a[k]; i = l; j = mid + 1; for (k = l; k <= r; k++) { if (i > mid) { a[k] = aux[j - l]; j++; } elseif (j > r) { a[k] = aux[i - l]; i++; } elseif (aux[i - l] > aux[j - l]) { a[k] = aux[j - l]; j++; } else { a[k] = aux[i - l]; i++; } } } voidmerge_sort(int a[], int l, int r)//归的思想 { if (l >= r) return; int mid = (l + r) / 2; merge_sort(a, l, mid); merge_sort(a, mid + 1, r); merge(a, l, r, mid); } voidmergesort(int a[], int l, int r)//再写个函数,方标调用 { merge_sort(a, l, r - 1); }
intmain() { int a[105], n, i; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &a[i]); mergesort(a, 0, n); for (i = 0; i < n; i++) printf("%d ", a[i]); return0; }