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?

StackOverflow https://stackoverflow.com/questions/789773

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

Était-ce utile?

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 ];
    /* ... */
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top