您好,我有以下方式发起的二维数组:
#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'}};
我知道我需要使用选择性排序方法和fors循环,但是我不确定如何使用。
最佳答案
首先,您必须将每列的第一个元素与所有其他顶部元素进行比较,如果一列的第一个元素大于下一列的顶部元素,则交换两列。还可以在算法标头中使用qsort函数进行排序。
下面是实现:
#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");
}
}