1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| QList<int> LOX(const QList<int> & P1, const QList<int> & P2) {
unsigned int i, value, n1 = P1.size(), n2 = P2.size();
qsrand(QTime::currentTime().msec());
// Points de croisements
unsigned int min = randInt( 0, n1 - 1);
unsigned int max = randInt(min, n1 - 1);
// On recopie les élements de P1 situer entre les points de croisements
QList<int> C1;
for (i = min; i < max; ++i)
C1.push_back(P1[i]);
// On recopie tous les éléments de P2 dans C2
QList<int> C2;
for (i = 0; i < n2; ++i)
C2.push_back(P2[i]);
// On supprime dans C2 les éléments de P1 qui sont situer entre les points de croisements
foreach (value, C1) {
i = 0; bool stop = false;
while (i < C2.size() && stop != true) {
if (value == C2[i]) {
C2.removeAt(i); stop = true;
}
++i;
}
}
// On insère les derniers éléments dans C1
i = 0;
foreach (value, C2) {
if (i < min) C1.insert(i, value);
else C1.push_back(value);
++i;
}
return C1;
} |
Partager