Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void swap(int *base, int a, int b)
- {
- int t = base[a];
- base[a] = base[b];
- base[b] = t;
- }
- void insertsort(int *base, int left, int right)
- {
- int i = left + 1;
- while (i <= right) {
- int loc = i - 1;
- while (loc >= 0 && abs(base[loc + 1]) < abs(base[loc])) {
- swap(base, loc + 1, loc);
- loc--;
- }
- i++;
- }
- }
- void merge(int k, int l, int m, int *base)
- {
- int t[m - k + 1];
- int i = k;
- int j = l + 1;
- int h = 0;
- while (h < m - k + 1) {
- if (j <= m && (i == l + 1 || abs(base[j]) < abs(base[i]))) {
- t[h] = base[j];
- j++;
- }
- else {
- t[h] = base[i];
- i++;
- }
- h++;
- }
- for (i = 0; i <= h - 1; i++) base[k + i] = t[i];
- }
- void mergesortrec(int low, int high, int *base)
- {
- if (low < high) {
- if (high - low + 1 < 5) {
- insertsort(base, low, high);
- }
- else {
- int med = (low + high) / 2;
- mergesortrec(low, med, base);
- mergesortrec(med + 1, high, base);
- merge(low, med, high, base);
- }
- }
- }
- void mergesort(int n, int *base)
- {
- mergesortrec(0, n - 1, base);
- }
- int main()
- {
- int n;
- scanf("%d\n", &n);
- int a[n];
- int i;
- for (i = 0; i < n; i++) scanf("%d", &a[i]);
- mergesort(n, a);
- for (i = 0; i < n; i++) printf("%d ", a[i]);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement