Сортировка двумерного массива методом Шелла - 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).
- В каждой итерации цикла, код сортирует массив по столбцу, начиная с текущего элемента.
- Если текущий элемент больше элемента в следующей позиции (считая от начала массива), то происходит перестановка элементов.
- Когда цикл завершается, массив выводится на экран.