Сортировка двумерного массива методом Шелла - 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);
}

Объяснение кода листинга программы

Вот что делает данный код:

  1. Инициализирует двумерный массив случайными значениями от 0 до 9.
  2. Повторяет цикл до тех пор, пока не будет выполнено условие остановки (переменная b не станет равной 0).
  3. В каждой итерации цикла, код сортирует массив по столбцу, начиная с текущего элемента.
  4. Если текущий элемент больше элемента в следующей позиции (считая от начала массива), то происходит перестановка элементов.
  5. Когда цикл завершается, массив выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.25 из 5
Похожие ответы