Comment puis-je effectuer une sorte d'insertion mais il faut vérifier une propriété de l'élément du tableau non seulement l'élément?
-
16-09-2019 - |
Question
Désolé, je suis sûr que c'est simple mais je suis fatigué et ne peut pas comprendre.
I ai un réseau d'éléments, chaque élément est en fait une particule qui est une structure de données (un struct à c) contenant, entre autres, la position actuelle des particules (int x, y, z). Je veux comparer les éléments x la position non seulement l'élément lui-même.
En regardant les sur wikipedia , j'ai essayé de le modifier pour comparer les attribue je veux, mais je pense que je l'ai fait quelque chose (probablement simple requise) mal.
Voici ce que j'ai modifié:
for (i = 1; i<length; i++) {
value = particles[i].position.x;
j = i - 1;
while (j >= 0 && particles[j].position.x > value) {
particles[j+1] = particles[j];
j = j - 1;
}
particles[j+1] = particles[i];
}
Si quelqu'un pourrait signaler mon erreur ce serait génial!
Adam
La solution
Votre 2ème ligne agit pour stocker une copie temporaire de l'élément ième, parce que la boucle while écrase. Pourtant, dans votre 2ème dernière ligne vous lisez de la valeur écrasée. Modifiez votre code à la suivante et il devrait fonctionner (changements commentés):
for (i = 1; i<length; i++) {
value = particles[i]; // store particles[i] rather than it's x coordinate
j = i - 1;
while (j >= 0 && particles[j].position.x > value.position.x) { // changed
particles[j+1] = particles[j];
j = j - 1;
}
particles[j+1] = value; // copy from temporary
}
Autres conseils
Vous avez besoin d'échanger des objets de particules, et non pas les valeurs des coordonnées x. Essayez:
for (i = 1; i<length; i++) {
value = particles[ i ];
/* ... */