Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- void merge(int left, int middle, int right, int* a) {
- int *b, n = right;
- b = (int*)malloc((right - left + 1) * sizeof(int));
- int i = left, j = middle + 1, h = 0;
- while (h < right - left + 1) {
- if ((j <= right) && ((i == middle + 1) || (a[j] < a[i]))) {
- b[h] = a[j];
- j++;
- }
- else {
- b[h] = a[i];
- i++;
- }
- h++;
- }
- for (int i = 0; i < h - 1; i++) {
- a[i] = b[i];
- }
- free(b);
- }
- void insert_sort(int *a, int n) {
- int swap;
- for(int j = 1; j < n; j++) {
- swap = a[j];
- int i = j - 1;
- while((i > -1) && (abs(a[i]) > abs(swap))) {
- a[i + 1] = a[i];
- i--;
- }
- a[i + 1] = swap;
- }
- }
- void merge_sort(int low, int high, int *a) {
- int medium = (low + high) / 2;
- if (high - low + 1 >= 5) {
- merge_sort(low, medium, a);
- merge_sort(medium + 1, high, a);
- merge(low, medium, high, a);
- }
- else {
- insert_sort(a, high + 1);
- }
- }
- void ssort(int left, int right, int* a) {
- if (right - left <= 5) {
- insert_sort(a, right + 1);
- }
- else {
- merge_sort(0, right, a);
- }
- }
- int main()
- {
- int n;
- scanf("%d", &n);
- int swap, p;
- int* a = malloc(n * sizeof(int));
- for(int i = 0; i < n; i++) {
- scanf("%d", &a[i]);
- }
- ssort(0, n - 1, a);
- for (int i = 0; i < n; i++) {
- printf("%d ", a[i]);
- }
- free(a);
- }
- ____________________________________________________________________________________________________________________________
- Составьте программу mergesort.c, осуществляющую сортировку массива целых чисел в порядке возрастания модуля числа.
- В программе должен быть реализован алгоритм сортировки слиянием, рекурсивную функцию которого нужно модифицировать таким образом, чтобы для последовательностей длиной меньше 5 выполнялась сортировка вставками.
- Размер и элементы массива должны считываться программой из стандартного потока ввода. Результат сортировки должен быть выведен в стандартный поток вывода.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement