2012-12-30 5 views
5

Je suis en train de trier une 2 dimensions réseau.Procédé tableau original estTri un tableau à 2 dimensions dans c

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

Lors d'un classement, il devrait être comme

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

Voici le code i utilisé en essayant d'implémenter Bubble Sort, i représente le nombre de lignes. Il ne tri toujours pas, toute aide sera grandement appréciée.

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

+13

Votre style de support est curieux. – moonwave99

+8

Pourquoi '4 2 2' vient-il avant' 4 1 2'? – pmg

+1

Un bon indice est que vous n'utilisez pas la variable 'x' en dehors de sa boucle. – Hogan

Répondre

3

Il semble que vous essayez de trier les lignes du tableau en lexicographical order. Si vous traitez le tableau 2D comme un tableau de tableaux, vous triez simplement les tableaux de second niveau dans le tableau de premier niveau en ordre lexicographique croissant.

Selon que le nombre de colonnes de votre baie est fixe, vous pouvez utiliser la fonction qsort avec un comparateur personnalisé. Par exemple, si vous savez qu'il y aura toujours exactement trois éléments dans chaque colonne, vous pouvez écrire un comparateur comme celui-ci:

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); 

Hope this helps!

-1

sorte tableau 2D dans 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]; 
Questions connexes