Wie kann ich eine Einführungs Art durchführen, sondern eine Eigenschaft des Elements in dem Array nicht nur das Element überprüfen?

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

Frage

Sorry, ich bin sicher, dies ist einfach, aber ich bin müde und kann es nicht herausgefunden.

I eine Reihe von Elementen haben, wird jedes Element in der Tat ein Teilchen, das eine Datenstruktur (eine Struktur in c) enthält, unter anderem der Teilchen aktuelle Position (int x, y, z). Ich mag die Elemente x-Position nicht nur das Element selbst vergleichen.

Mit Blick auf dem Pseudo-Code auf wikipedia , habe ich versucht, es zu ändern, die vergleichen Attribut ich will, aber ich glaube, ich habe etwas (wahrscheinlich einfach) falsch gemacht.

Hier ist, was ich geändert habe:

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];
}

Wenn jemand meine Fehler hinweisen könnte, das wäre toll!

Adam

War es hilfreich?

Lösung

Ihre zweite Linie wirkt eine temporäre Kopie des i-ten Elements zu speichern, da die while-Schleife überschreibt. Doch in der zweiten letzten Zeile sind Sie aus dem überschriebenen Wert zu lesen. Ändern Sie den Code der folgenden und es sollte funktionieren (Änderungen kommentiert):

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
}

Andere Tipps

Sie müssen Partikel Objekte tauschen, nicht die Werte der x-Koordinaten. Versuchen Sie:

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top