在 C 的二维数组中移动列

Moving columns in a bidemensional array in C

您好,我有一个二维数组是通过以下方式启动的:

#include <stdio.h>
#include <stdlib.h>

int main(){

char matriz[6][5]={
{'F','H','V','D','U'},
{'E','L','Q','U','E'},
{'P','E','R','S','E'},
{'V','E','R','A','A'},
{'L','C','A','N','Z'},
{'A','Z','Z','Z','Z'}};

system("pause");
}

我需要移动列,按字母顺序排列第一行, 我的意思是,包含 {'F','H','V','D','U'}.

的行

我需要以下输出:

char matriz[6][5]={
{'D','F','H','U','V'},
{'U','E','L','E','Q'},
{'S','P','E','E','R'},
{'A','V','E','A','R'},
{'N','L','C','Z','A'},
{'Z','A','Z','Z','Z'}};

我知道我需要使用选择性排序法和for循环,但我不知道如何。

声明一个结构:

typedef struct{
  colChar:char;
  colIndex:int;
} COL_HEADER;

将它们组成一个数组,长度与行长度相同:

COL_HEADER myColHeaders[5];

循环加载每个,colChar 作为列 header char,colIndex 作为列索引,0-4。

现在您可以使用仅比较 colChar 的比较函数对数组进行 qsort。 colIndex 跟踪初始列。您现在知道哪个列需要输出到哪里了。

然后您可以使用几个循环将源列复制到 'dest' [6][5],使用 myColHeaders[5].colIndex 来识别每个源列的目标列。

首先你必须将每列的第一个元素与所有其他顶部元素进行比较,如果列的第一个元素大于下一列的顶部元素然后交换两列。您还可以在算法中使用qsort函数header用于排序。

下面是实现:

#include <stdio.h>
int main(){

    int i,k,j;        

    char matriz[6][5]={
    {'F','H','V','D','U'},
    {'E','L','Q','U','E'},
    {'P','E','R','S','E'},
    {'V','E','R','A','A'},
    {'L','C','A','N','Z'},
    {'A','Z','Z','Z','Z'}};

    for(i=0;i<4;i++)
    {
        for(k=i+1;k<5;k++)
        {   
            //comparing top elements of columns 
            if(matriz[0][i]>matriz[0][k])
            {
                //swapping columns
                for(j=0;j<6;j++)
                {
                    int t=matriz[j][i];
                    matriz[j][i]=matriz[j][k];
                    matriz[j][k]=t;
                }
            }
        }
    }

    //display

    for(i=0;i<6;i++)
    {
        for(k=0;k<5;k++)
        printf("%c ",matriz[i][k]);
        printf("\n");
    }

}