2016-04-01 5 views
-2

Hallo Ich habe ein zweidimensionales Array hat die folgende Art und Weise:Spalten in einer bidemensional Array in C bewegen

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

Und ich brauche die Spalten zu bewegen, in alphabetischer Reihenfolge die erste Zeile der Bestellung ich meine, die Linie, die enthält {'F','H','V','D','U'}.

Ich brauche die folgende Ausgabe:

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'}}; 

Ich weiß, ich brauche die selektive Sortiermethode und einen Zyklus von fors zu verwenden, aber ich bin nicht sicher, wie.

+2

Was Sie beschreiben, ist kein transponieren. – EOF

+0

Ist das eine Aufgabe? Es klingt sicher so. Wie auch immer, Sie können jedes Array einfach ['qsort'] (http://en.cppreference.com/w/c/algorithm/qsort) verwenden. – Leandros

+1

Ich bin mir nicht sicher, dass ein qsort es tun wird. Die Elemente sind im Speicher nicht zusammenhängend. –

Antwort

1

Zuerst müssen Sie die ersten Elemente jeder Spalte auf alle anderen Top-Elemente zu vergleichen, wenn eine erstes Element der Spalte größer als die obere Element der nächsten Spalte Swap dann beide Spalten .Sie auch verwenden können qsort Funktion im Algorithmus Header zum Sortieren.

Unten ist die Umsetzung:

#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

Nicht sicher, dass Skalen zu gut, im Allgemeinen .. –

+0

Obwohl die Sortierung Algo nicht zu effizient ist, aber es wird funktionieren Problem angegeben (wie die Matrix ist kurz). –

+0

@RajeevSingh es funktioniert. Vielen Dank. – Const

2

Deklarieren eines struct:

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

Stellen eine Reihe von ihnen, gleiche Länge wie Zeilenlänge:

COL_HEADER myColHeaders [5];

Laden Sie jede in einer Schleife, colChar als Spaltenüberschrift char, colIndex als Spaltenindex, 0-4.

Jetzt können Sie das Array mit einer Vergleichsfunktion, die nur den colChar vergleicht, qsort. Der colIndex verfolgt die anfänglichen Spalten. Sie wissen jetzt, welcher Spalte wo in der Ausgabe gehen muss.

Sie können dann einige Schleifen verwenden, um die Quellspalten in ein 'dest' [6] [5] zu kopieren. Verwenden Sie dazu den myColHeaders [5] .colIndex, um die Zielspalte für jede Quellspalte zu identifizieren.

+0

Dies wäre eine bessere Antwort, wenn das Beispiel eher in C als in einer Art Hybrid geschrieben wäre. Aber +1 trotzdem. – rici

+0

@rici Ich wollte OPs Hausaufgaben nicht in seiner Gesamtheit machen, also gab ich einen groben Algorithmus :) –