2012-12-30 22 views
5

Sto cercando di ordinare una dimensione array.the matrice originale 2 èOrdinamento di un array bidimensionale 2 in c

5 0 3 
4 1 2 
3 1 1 
4 2 2 
3 3 1 

Quando ordinato, dovrebbe essere come

3 1 1 
3 3 1 
4 2 2 
4 1 2 
5 0 3 

Ecco il codice che ho usato cercando di implementare Bubble Sort, I rappresenta il numero di righe.

int x,y,z,j,temp1,temp2,temp3; 
for(x=0;x<i;x++) 
{ 
    for (j=0;j<i-1;j++) 
    { 
     if(a[j][0]>a[j+1][0]) 
     { 
      temp1=a[j][0]; 
      temp2=a[j][1]; 
      temp3=a[j][2]; 
      a[j][0]=a[j+1][0]; 
      a[j][1]=a[j+1][1]; 
      a[j][2]=a[j+1][2]; 
      a[j+1][0]=temp1; 
      a[j+1][1]=temp2; 
      a[j+1][2]=temp3; 
     } 
    } 
} 

non funziona ancora, qualsiasi aiuto sarà molto apprezzato.

+13

Il tuo stile staffa è curioso. – moonwave99

+8

Perché '4 2 2' viene prima di' 4 1 2'? – pmg

+1

Un buon suggerimento è che non si usa la variabile 'x' al di fuori del suo ciclo. – Hogan

risposta

3

Sembra che si stia tentando di ordinare le righe dell'array in lexicographical order. Se si considera l'array 2D come una matrice di matrici, allora si stanno solo ordinando gli array di secondo livello all'interno dell'array di primo livello in ordine lessicografico ascendente.

A seconda che il numero di colonne nell'array sia corretto, è possibile farlo utilizzando la funzione qsort con un comparatore personalizzato. Ad esempio, se si sa che ci saranno sempre esattamente 3 elementi in ogni colonna, si potrebbe scrivere un comparatore come questo:

static const size_t NUM_COLS = 3; 

/* Lexicographically compare two arrays of size NUM_COLS. */ 
int CompareArrays(const void* arr1, const void* arr2) { 
    /* Convert back to the proper type. */ 
    const int* one = (const int*) arr1; 
    const int* two = (const int*) arr2; 

    /* Do an element-by-element comparison. If a mismatch is found, report how 
     * the arrays compare against one another. 
     */ 
    for (size_t i = 0; i < NUM_COLS; i++) { 
     if (one[i] < two[i]) return -1; 
     if (one[i] > two[i]) return +1; 
    } 

    /* If we get here, the arrays are equal to one another. */ 
    return 0; 
} 

/* Use qsort to sort the arrays */ 
qsort((const int*)&one, numRows, sizeof(int[NUM_COLS]), CompareArrays); 

Spero che questo aiuti!

-1

sorta matrice 2D in c

int x[5][5],i,j,i1,j1,temp,k; 

for (int i=0;i<5;i++) 
for (int j=0:<5;j++) 
cin>>x[i][j]; 


for (int i=0;i<5;i++) 
    for (int j=0:<5;j++) 
{ 
    k=j+1; 
      for (int i1=0;i<5;i1++) 
      { 
       for (int j1=k:<5;j1++) 
        { 
        if (x[i,j]>x[i1,j1]) 
         { 
         temp=x[i,j]; 
         x[i,j]=x[i1,j1]; 
         x[i1,j1]=temp; 
         } 
        } 
       k=1; 
      } 
} 


for (int i=0;i<5;i++) 
for (int j=0:<5;j++) 
cout<<x[i][j]; 
Problemi correlati