2009-04-25 4 views
0

Sorry, ich bin sicher, das ist einfach, aber ich bin müde und kann es nicht herausfinden.Wie kann ich eine Einfügesortierung durchführen, aber eine Eigenschaft des Elements im Array überprüfen und nicht nur das Element?

Ich habe eine Reihe von Elementen, jedes Element ist in der Tat ein Teilchen, das eine Datenstruktur (eine Struktur in c) ist, die unter anderem die aktuelle Position der Teilchen (int x, y, z) enthält. Ich möchte die Elemente x Position nicht nur das Element selbst vergleichen.

Mit Blick auf die pseudocode on wikipedia habe ich versucht, es zu ändern, um das Attribut zu vergleichen, das ich will, aber ich denke, 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 heraus, das wäre toll!

Adam

+0

Nun, ich nehme an, es funktioniert nicht ‚cos die App wird flippig nach diesem Teil zu schreiben, aber es * könnte * sein etwas anderes, Ich dachte mir nur, dass es das ist, seit ich müde bin und es dauerte eine unglaublich lange Zeit, um es neu zu schreiben. –

Antwort

4

Ihre zweite Linie wirkt eine temporäre Kopie des i-ten Elements zu speichern, da die while-Schleife überschreibt. In Ihrer vorletzten Zeile lesen Sie jedoch den überschriebenen Wert. Ändern Sie den Code des 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 
} 
+0

Vielen Dank, dass es behoben! –

1

Sie benötigen Partikel Objekte tauschen, nicht die Werte der x-Koordinaten. Versuchen:

for (i = 1; i<length; i++) { 
    value = particles[ i ]; 
    /* ... */ 
Verwandte Themen