melnikovmaxim

C_Sort merge

Jan 2nd, 2020
259
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.41 KB | None | 0 0
  1. //Сортировка слиянием
  2. //Алгоритм сортировки https://ru.wikipedia.org/wiki/Сортировка_слиянием
  3. //является одной из самых быстрых, но использует больше памяти
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. #define size 25 // size + 1
  9.  
  10. void merging(int* a, int start, int mid, int end) { //метод слияния
  11.     int l1, l2, i;
  12.  
  13.     int b[size + 1];
  14.  
  15.     for (l1 = start, l2 = mid + 1, i = start; l1 <= mid && l2 <= end; i++) {
  16.         if (a[l1] <= a[l2])
  17.             b[i] = a[l1++];
  18.         else
  19.             b[i] = a[l2++];
  20.     }
  21.  
  22.     while (l1 <= mid)
  23.         b[i++] = a[l1++];
  24.  
  25.     while (l2 <= end)
  26.         b[i++] = a[l2++];
  27.  
  28.     for (i = start; i <= end; i++)
  29.         a[i] = b[i];
  30. }
  31.  
  32. void sort(int* a, int start, int end) { //метод сортировки, разбивая массив на двое и рекурсивно вызывая себя, пока не будет полностью отсортирован по частям (2)
  33.     if (start < end) {
  34.         int mid = (start + end) / 2;
  35.         sort(a, start, mid);
  36.         sort(a, mid + 1, end);
  37.         merging(a, start, mid, end);
  38.     }
  39. }
  40.  
  41. int main() {
  42.     int i;
  43.  
  44.     int a[size];
  45.  
  46.     printf("List before sorting\n");
  47.  
  48.     for (i = 0; i < size; i++)
  49.     {
  50.         a[i] = rand() % 20 - 10;
  51.         printf("%d ", a[i]);
  52.     }
  53.  
  54.     sort(a, 0, size);
  55.  
  56.     printf("\nList after sorting\n");
  57.  
  58.     for (i = 0; i < size; i++)
  59.         printf("%d ", a[i]);
  60. }
Add Comment
Please, Sign In to add comment