2016-04-01 11 views
-2

你好,我有一个二维数组初始化方式如下:移动列在bidemensional阵列用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'}}; 

我知道我需要使用选择性排序方法和维权的一个周期,但我不知道怎么样。

+2

你所描述是不是转。 – EOF

+0

这是转让吗?它确实听起来像。无论如何,你可以['qsort'](http://en.cppreference.com/w/c/algorithm/qsort)每个数组。 – Leandros

+1

我不确定qsort会这样做。内存中的元素不连续。 –

回答

1

首先,你必须比较每列的第一要素向所有其他顶级元素,如果列的第1个要素是更大比下一列的顶级元素,则交换两列。你也可以使用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"); 
    } 

} 
+0

不确定那个尺度太好,总的来说.. –

+0

尽管排序算法不是太高效,但它可以用于指定的问题(因为矩阵很短)。 –

+0

@RajeevSingh它的工作原理。谢谢。 – Const

2

声明一个结构:

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

让他们的阵列,相同长度的行长度:

COL_HEADER myColHeaders [5];

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

现在你可以使用比较函数来比较colChar。 colIndex跟踪最初的列。你现在知道哪个col需要去哪里输出。

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

+0

如果这个例子是用C语言编写的,而不是某种混合语言,这将会是一个更好的答案。但无论如何+1。 – rici

+0

@rici我不想完整地完成OP的作业,所以我给出了一个粗略的算法:) –