Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Сортировка слиянием
- //Алгоритм сортировки https://ru.wikipedia.org/wiki/Сортировка_слиянием
- //является одной из самых быстрых, но использует больше памяти
- #include <stdio.h>
- #include <stdlib.h>
- #define size 25 // size + 1
- void merging(int* a, int start, int mid, int end) { //метод слияния
- int l1, l2, i;
- int b[size + 1];
- for (l1 = start, l2 = mid + 1, i = start; l1 <= mid && l2 <= end; i++) {
- if (a[l1] <= a[l2])
- b[i] = a[l1++];
- else
- b[i] = a[l2++];
- }
- while (l1 <= mid)
- b[i++] = a[l1++];
- while (l2 <= end)
- b[i++] = a[l2++];
- for (i = start; i <= end; i++)
- a[i] = b[i];
- }
- void sort(int* a, int start, int end) { //метод сортировки, разбивая массив на двое и рекурсивно вызывая себя, пока не будет полностью отсортирован по частям (2)
- if (start < end) {
- int mid = (start + end) / 2;
- sort(a, start, mid);
- sort(a, mid + 1, end);
- merging(a, start, mid, end);
- }
- }
- int main() {
- int i;
- int a[size];
- printf("List before sorting\n");
- for (i = 0; i < size; i++)
- {
- a[i] = rand() % 20 - 10;
- printf("%d ", a[i]);
- }
- sort(a, 0, size);
- printf("\nList after sorting\n");
- for (i = 0; i < size; i++)
- printf("%d ", a[i]);
- }
Add Comment
Please, Sign In to add comment