Tri d’un tableau à 2 dimensions en c

J’essaie de sortinger un tableau à 2 dimensions. Le tableau d’origine est

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

Quand sortingé, ça devrait être comme

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

Voici le code que j’ai utilisé en essayant d’implémenter Bubble Sort, i représente le nombre de lignes.

 int x,y,z,j,temp1,temp2,temp3; for(x=0;x<i;x++) { for (j=0;ja[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; } } } 

cela ne sortinge toujours pas, toute aide sera grandement appréciée.

On dirait que vous essayez de sortinger les lignes du tableau dans l’ ordre lexicographique . Si vous traitez le tableau 2D comme un tableau de tableaux, vous sortingez simplement les tableaux de second niveau du tableau de premier niveau en ordre lexicographique croissant.

Selon que le nombre de colonnes de votre tableau est fixe ou non, vous pouvez le faire en utilisant la fonction qsort avec un comparateur personnalisé. Par exemple, si vous savez qu’il y aura toujours exactement 3 é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); 

J’espère que cela t’aides!

sortinger un tableau 2D en 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<