PDA

Visualizza la versione completa : [C++] Ordinamento matrice


dibussolo
23-08-2010, 18:03
Buonasera a tutti !! Ho letto e riletto altri post ma non ho trovato nulla, nel senso che non ci sono soluzioni.
Semplicemente mi serve capire come ordinare una matrice in c++.
Ad esempio ho:

3 1 8
4 9 2
5 1 7

e devo trasformarla in :

1 3 8
2 4 9
1 5 7

..come faccio ? se volete possiamo anche arrivarci insieme !

dibussolo
23-08-2010, 18:07
Ad esempio possiamo cominciare così:



#include <iostream>
#define max 100

using namespace std;

int main(int argc, char** argv)
{
int i,j,n,m;
int a[max][max];

//leggi_mat a
cout<<"Inserire la dimensione della matrice."<<endl;
cout<<"Inserire la dimensione di n: ";
cin>>n;
cout<<"Inserire la dimensione di m: ";
cin>>m;
cout<<"Inserire la prima matrice."<<endl;
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
cout<<"Inserire l'elemento ["<<i<<"]["<<j<<"]: ";
cin>>a[i][j];
}
}

cout<<"La matrice inserita è: "<<endl;
for(i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

Ippo343
23-08-2010, 20:13
Devi solo ordinare ogni riga della matrice se non ho capito male. Per fare questo ci sono diversi algoritmi: il più facile è il bubble sort, il più comodo è il qsort (è già implementato nella libreria standard, algorithm.h se non sbaglio).

Fai una ricerca sul forum, sicuramente si è già parlato di ordinare un vettore.

Alex'87
23-08-2010, 21:21
Originariamente inviato da Ippo343
il più comodo è il qsort (è già implementato nella libreria standard, algorithm.h se non sbaglio). È in stdlib.h mi pare :master:

Ippo343
23-08-2010, 21:37
Ho controllato e hai ragione.

Il che apre un nuovo mistero: ricordo di aver fatto un programma in cui usavo qsort, e ricordo che ho dovuto includere algorithm.h... perchè diamine l'avrò fatto!? :confused:

dibussolo
24-08-2010, 16:46
Questo è per quanto riguarda un array monodimensionale (funziona correttamente):



int app;
int scambio=1;
while (i<n-1 && scambio)
{
{
scambio = 0;
for (j=0; j<n-(i+1);j++)
{
if (a[j]>a[j+1])
{
app=a[j];
a[j]=a[j+1];
a[j+1]=app;
scambio=1;
}
}
i++;
}
}


Perchè non funziona questo per la matrice bidimensionale?



int app;
int scambio=1;
while (i<n-1 && scambio)
{
for (i=0;i<n;i++)
{
scambio = 0;
for (j=0; j<m-(i+1);j++)
{
if (a[i][j]>a[i][j+1])
{
app=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=app;
scambio=1;
}
}
i++;
}
}

Ippo343
24-08-2010, 20:26
Sinceramente non ho capito benissimo la modifica che hai fatto, e non ho molto tempo, quindi considera che questo codice che hai postato implementa il bubble sort.

Perciò, puoi incapsularlo in una funzione:


void bubble_sort(int v[], int n);


e usarlo su ogni vettore della matrice:



for (i = 0; i < DIM; i++)
{
bubble_sort(matrice[i], num); //num è il numero di elementi di ogni riga
}


A questo punto, ti conviene cmq usare il qsort della libreria standard.

Loading