Kao što reče Shadowed, matrica se može predstaviti kao niz, a može i obrnuto (pogotovo preko pokazivača, ali to je druga tema).
Recimo možeš podatke koji su već u matrici posmatrati kao jedan niz od N*N elemenata, pa iskoristiti pomenuti bubble-sort algoritam da sortiraš po redu.
Pretvaranje rednog broja niza u
vrstu & kolonu matrice možeš uraditi sa
deljenjem i
modulom:
vrsta = REDNI_BROJ_ELEMENTA_NIZA_OD_NULTOG_INDEKSA / DIMENZIJA_MATRICE;
kolona = REDNI_BROJ_ELEMENTA_NIZA_OD_NULTOG_INDEKSA % DIMENZIJA_MATRICE;
Dakle, ako imaš neki niz kao što je prikazano, broj 6, (njegov indeks je 5, jer indeksi idu od 0):
1 2 3 4 5 6 7 8 9
... u matrci (posmatrano kao matrica):
1 2 3
4 5 6
7 8 9
... ima položaj:
vrsta = 5 / 3 =
1
kolona = 5 % 3 =
2
... odnosno:
matrica[1][2] == 6
// evo i parce koda, da se vidi o cemu se radi:
Code:
// netestirano
#include <stdio.h>
#include <stdlib.h>
int main()
{
/* indeksi za dvostruku unutrasnju petlju */
int i, j;
/* izracunavanje vrste i kolone kvadratne matrice, za oba broja (slova) koji ce se uporedjivati u bubble sortu */
int i_vrsta, i_kolona, j_vrsta, j_kolona;
/* za zamenu vrednosti */
char pomocni;
/* test podaci */
const int n=4;
char matrica[4][4]=
{
{ 'd','o','j','f' },
{ 'e','p','k','m' },
{ 'n','l','b','g' },
{ 'i','a','h','c' }
};
/* ispis pre sortiranja */
for ( i=0; i<n; i++ )
{
for ( j=0; j<n; j++ )
printf( "%c", matrica[i][j] );
printf( "\n" );
}
/* sortiranje */
printf("\n\nSortiranje...\n\n");
for ( i=0; i<n*n-1; i++ )
for ( j=i+1; j<n*n; j++ )
{
i_vrsta = i / n;
i_kolona = i % n;
j_vrsta = j / n;
j_kolona = j % n;
if ( matrica[i_vrsta][i_kolona] > matrica[j_vrsta][j_kolona] )
{
pomocni = matrica[i_vrsta][i_kolona];
matrica[i_vrsta][i_kolona] = matrica[j_vrsta][j_kolona];
matrica[j_vrsta][j_kolona] = pomocni;
}
}
/* ispis posle sortiranja */
for ( i=0; i<n; i++ )
{
for ( j=0; j<n; j++ )
printf( "%c", matrica[i][j] );
printf( "\n" );
}
return 0;
}