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;
}
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;
}
To copy to clipboard, switch view to plain text mode
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;
}
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;
}
To copy to clipboard, switch view to plain text mode
Bookmarks