在 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");
}
}
您好,我有一个二维数组是通过以下方式启动的:
#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");
}
}