Сортировка двумерного массива методом Шелла - C (СИ)
Формулировка задачи:
У меня вопрос, как сортировать массив методом Шелла так чтобы не перейти из двумерному к одномерного массива
Решение задачи: «Сортировка двумерного массива методом Шелла»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int i, j, A[8][8], s, k, pas, buf, n = 8, m = 8, b; srand((unsigned)time(NULL)); pas = n * m; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) printf ("%d ", A[i][j] = rand() % 10); printf ("\n"); } printf ("\n"); do { pas = n * m; b = 1; while ((pas = pas / 2)) { for (j = 0; j < m; j++) { for (i = 0; i < n; i++) { if (i + pas < n) { if (A[i][j] > A[i + pas][j]) { b = 0; buf = A[i][j]; A[i][j] = A[i + pas][j]; A[i + pas][j] = buf; } } else { s = i + pas; k = j; while (s >= n) { s -= n; k++; } if (k < n) if (A[i][j] > A[s][k]) { b = 0; buf = A[i][j]; A[i][j] = A[s][k]; A[s][k] = buf; } } } } } } while (!b); printf ("\n"); for (i = 0; i < n; i++) { for (j = 0; j < m; j++) printf ("%d ", A[i][j]); printf ("\n"); } return (0); }
Объяснение кода листинга программы
Вот что делает данный код:
- Инициализирует двумерный массив случайными значениями от 0 до 9.
- Повторяет цикл до тех пор, пока не будет выполнено условие остановки (переменная b не станет равной 0).
- В каждой итерации цикла, код сортирует массив по столбцу, начиная с текущего элемента.
- Если текущий элемент больше элемента в следующей позиции (считая от начала массива), то происходит перестановка элементов.
- Когда цикл завершается, массив выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д