PDA

View Full Version : Ordinare una matrice in ordine decrescente


92nick92
25-09-2013, 17:16
Dovrei scrivere una funzione che mi permetta di stampare a video una matrice,ordinando le sue righe in modo decrescente rispetto ai valori delle loro somme.
Ho provato in questo modo(e ovviamente non funziona xD)



//(C++) R è il vettore che contiene la somma delle righe
for(int i=0;i<3;i++)
{
for(int j=0;j<4;j++)
{
if(R[i]<R[i+1])
{ int tmp;
tmp=x[i][j];
x[i][j]=x[i+1][j];
x[i+1][j]=tmp;
}
cout << x[i][j] << " ";}


e capisco anche qual è il problema(cioè che in questo modo se una riga deve "salire di due o più posti" non può farlo) e ho provato a risolverlo facendo un ciclo while che racchiuda il doppio ciclo for con condizione(R[i]<R[i+1]),ma in questo modo mi stampa matrici all'infinito,come se non fosse mai soddisfatta la condizione...ma non capisco il perchè,visto che dovrebbero bastare due doppi cicli for per ordinarla(la matrice è
5 6 1 25
10 22 2 12
55 11 3 1 )
P.S. ho già controllato che la somma delle righe sia stata effettuata correttamente

Oceans11
26-09-2013, 06:57
se devi solo stampare in modo ordinato, perchè complicarti la vita nel riordinamento della matrice?

hai il vettore delle R somme (uguale a quello della matrice, ovviamente), ricerca il minimo e stampa la riga della matrice relativa all'indice di quel minimo,
poi cerchi il minimo "successivo".

PHØΞИIX
26-09-2013, 09:10
- Ti costruisci un array bidimensionale contenente [indice di riga, somma della riga]
- Ordini tale matrice in base al campo somma con un qualsiasi algoritmo (es: quicksort)
- Stampi a video la righe della tua matrice iniziale seguendo l'ordine del campo indice della matrice che hai ordinato

Es:

matrice iniziale
|2 4 3 |
|2 1 3 |
|3 1 4 |

array bidimensionale con [ind.riga, somma riga]
[[1,9],[2,6],[3,8]]

ordini tale array sulle somme
[[2,6],[3,8],[1,9]]

stampi a video l righe della matrice iniziale seguendo l'ordine dettato dai campi indice dell'array (prima riga 2, poi riga 3, infine riga 1)
|2 1 3 |
|3 1 4 |
|2 4 3 |


EDIT: ovviamente ho ordinato la matrice in modo crescente. Sorry!