robgeek
6th February 2016, 14:26
Hi!
I have a QVector of Number object which I have to sort by descending, but look at the output:
QVector<Number> Game::descendingOrderVector(QVector<Number> ranking) {
int length = ranking.size( );
length--;
cout << "BEFORE" << endl;
for(int i = 0; i < ranking.size( ); i++)
cout << "(" << ranking[i].val << ", " << ranking[i].acum << ") ";
for(int i = 0; i < length; i++)
for(int j = 0; j < length; j++)
if(ranking[ j ].acum < ranking[j + 1].acum)
ranking.replace(j, ranking.at(j + 1));
cout << endl << "AFTER" << endl;
for(int i = 0; i < ranking.size( ); i++)
cout << "(" << ranking[i].val << ", " << ranking[i].acum << ") ";
return ranking;
}
BEFORE
(2, 87) (4, 33) (1, 162) (5, 22) (6, 21) (3, 61) (7, 14) (9, 3) (10, 3) (11, 4) (8, 4) (13, 2) (20, 1)
AFTER
(1, 162) (2, 87) (3, 61) (4, 33) (5, 22) (6, 21) (7, 14) (8, 4) (11, 4) (11, 4) (11, 4) (13, 2) (20, 1)
I believe the problem is with replace() because if i use the following code my method sorts correctly.
Number aux;
if(ranking[ j ].acum < ranking[j + 1].acum) {
aux.val = ranking[ j ].val;
aux.acum = ranking[ j ].acum;
ranking[ j ].val = ranking[j + 1].val;
ranking[ j ].acum = ranking[j + 1].acum;
ranking[j + 1].val = aux.val;
ranking[j + 1].acum = aux.acum;
}
I have a QVector of Number object which I have to sort by descending, but look at the output:
QVector<Number> Game::descendingOrderVector(QVector<Number> ranking) {
int length = ranking.size( );
length--;
cout << "BEFORE" << endl;
for(int i = 0; i < ranking.size( ); i++)
cout << "(" << ranking[i].val << ", " << ranking[i].acum << ") ";
for(int i = 0; i < length; i++)
for(int j = 0; j < length; j++)
if(ranking[ j ].acum < ranking[j + 1].acum)
ranking.replace(j, ranking.at(j + 1));
cout << endl << "AFTER" << endl;
for(int i = 0; i < ranking.size( ); i++)
cout << "(" << ranking[i].val << ", " << ranking[i].acum << ") ";
return ranking;
}
BEFORE
(2, 87) (4, 33) (1, 162) (5, 22) (6, 21) (3, 61) (7, 14) (9, 3) (10, 3) (11, 4) (8, 4) (13, 2) (20, 1)
AFTER
(1, 162) (2, 87) (3, 61) (4, 33) (5, 22) (6, 21) (7, 14) (8, 4) (11, 4) (11, 4) (11, 4) (13, 2) (20, 1)
I believe the problem is with replace() because if i use the following code my method sorts correctly.
Number aux;
if(ranking[ j ].acum < ranking[j + 1].acum) {
aux.val = ranking[ j ].val;
aux.acum = ranking[ j ].acum;
ranking[ j ].val = ranking[j + 1].val;
ranking[ j ].acum = ranking[j + 1].acum;
ranking[j + 1].val = aux.val;
ranking[j + 1].acum = aux.acum;
}