微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按字典顺序排列矩阵中的列

如何解决按字典顺序排列矩阵中的列

我一直在尝试通过字典顺序对矩阵中的列进行排序(维度为 m,n

enter image description here

#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",&m);
    printf("Input the number of columns: ");
    scanf("%d",&n);

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

    return 0;
}

解决方法

试试这个解决方案(仅适用于输入 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",&m);
printf("Input the number of columns: ");
scanf("%d",&n);

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

return 0;

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。