您好,我有以下方式发起的二维数组:

#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");
    }

}

08-04 08:02