Упорядочивание столбцов в матрице лексикографически

#c #function #sorting #matrix #lexicographic

#c #функция #сортировка #матрица #лексикографический

Вопрос:

Я пытался отсортировать столбцы в матрице (размеры m, n <= 10) по лексикографическому порядку (если столбцы имеют один и тот же элемент, тогда мы сравниваем элементы в строке ниже и т.д.) С некоторыми дополнительными условиями. Мне нужно использовать функции для печати матрицы, ввода случайных целых чисел до 5 в качестве ее элементов и, наконец, упорядочивания матрицы. Я думаю, что я правильно получил печать и случайные входные данные, но я не могу разобраться в сортировке. Кроме того, я не могу использовать глобальные переменные, которые я понятия не имею, как это сделать, поскольку мне не было показано. Примером матрицы может быть : введите описание изображения здесь

 #include <stdio.h>
#include <stdlib.h>
int main()
{
    int m, n;
    int mat[10][10];

    void print_matrix()
    {
        int i, j;
        for (i = 0; i < m; i  )
        {
            for (j = 0; j < n; j  )
            {
                printf("%d ", mat[i][j]);
            }
            printf("n");
        }
    }

    void random_int()
    {
        int i, j;
        srand((unsigned)time(NULL));
        for (i = 0; i < m; i  )
        {
            for (j = 0; j < n; j  )
            {
                mat[i][j] = rand() % 5;
            }
        }
    }

    void arrange()
    {
        int i, j, k, a;
        for (j = 0; j < n;   j)
        {
            for (i = 0; i < m;   i)
            {
                for (k = i   1; k < m;   k)
                {
                    if (mat[i][j] < mat[k][j])
                    {
                        a = mat[i][j];
                        mat[i][j] = mat[k][j];
                        mat[k][j] = a;
                    }
                }
            }
        }
    }


    printf("Input the number of rows : ");
    scanf("%d", amp;m);
    printf("Input the number of columns: ");
    scanf("%d", amp;n);

    random_int(mat[m][n]);
    print_matrix(mat[m][n]);
    arrange(mat[m][n]);
    print_matrix(mat[m][n]);

    return 0;
}
 

Комментарии:

1. В вашем сообщении нет вопросов. Задайте конкретный вопрос.

Ответ №1:

Попробуйте это решение (будет работать только для ввода 0-8), также используются глобальные переменные:

Существует несколько решений. но это самый простой. Я преобразовал каждый из столбцов в целочисленное значение. затем пузырь отсортировал целые числа. После сортировки. Затем я преобразовал целочисленное значение в цифры. (Вы должны знать, как преобразовать отдельные цифры в многозначное целое число, а многозначные целые числа в однозначные.

Обратите внимание, что я добавил по одному (1) к каждой цифре. Потому что входные данные могут быть равны нулю (0). если вы преобразуете 0 0 2 1 в целое число, то будет всего 21. первые две цифры потеряны. Итак, я добавил 1. таким образом, 0 0 2 1 будет преобразовано в 1132. Я сделал (добавил 1) для каждого ввода (вычел 1 после сортировки). таким образом, это не повлияет на другие входные данные. Будьте осторожны, ввод должен быть от (0 до 8)

 #include <stdio.h>
#include <stdlib.h>
#include <time.h>
int m, n;
int mat[10][10];
int generatedNumber[10];

void print_matrix()
{
printf("The matrix is:n");
int i, j;
for (i = 0; i < m; i  )
{
    for (j = 0; j < n; j  )
    {
        printf("%d ", mat[i][j]);
    }
    printf("n");
 }
}

void random_int()
{
int i, j;
srand((unsigned)time(NULL));
for (i = 0; i < m; i  )
{
    for (j = 0; j < n; j  )
    {
        mat[i][j] = rand() % 5;
    }
 }
}

void arrange()
{
int i, j, k, a;
for (j = 0; j < n;   j)
{
    int number = 0;
    for (i = 0; i < m;   i)
    {
        number = number * 10   mat[i][j]   1;///Adding one for avoiding zero(0)

    }
    generatedNumber[j] = number;
}

for(i = 0; i < n; i  )
{
    for(j = 0; j < n-i-1; j  )
    {
        if( generatedNumber[j] > generatedNumber[j 1])
        {
            // swap the elements
            int temp = generatedNumber[j];
            generatedNumber[j] = generatedNumber[j 1];
            generatedNumber[j 1] = temp;
        }
    }
}

for(i = 0; i < n; i  )///columwise
{
    int generatedColumnvalue = generatedNumber[i];
    for(j = m -1; j>= 0; j--)///row wise and fro last vaue to first
    {

        mat[j][i] = (generatedColumnvalue%10)-1;///removing extra added 1
        generatedColumnvalue/=10;
    }
  }
 }

 int main()
 {
printf("Input the number of rows : ");
scanf("%d", amp;m);
printf("Input the number of columns: ");
scanf("%d", amp;n);

random_int();
print_matrix();
arrange();
print_matrix();

return 0;
 

}