Come posso eseguire un ordinamento per inserzione ma controllare una proprietà dell'elemento nella matrice non solo l'elemento?

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

Domanda

Siamo spiacenti, sono sicuro che questo è semplice, ma sono stanco e non riesco a capirlo.

Ho un array di elementi, ogni elemento è infatti una particella che è una struttura di dati (una struttura in c) contenente, tra l'altro la posizione corrente particelle (int x, y, z). Voglio mettere a confronto la posizione di elementi x non solo l'elemento stesso.

Guardando le href="http://en.wikipedia.org/wiki/Insertion_sort" su wikipedia , ho cercato di modificarlo per confrontare la attribuisco che voglio, ma credo di aver fatto qualcosa (probabilmente semplice) sbagliato.

Ecco quello che ho modificato:

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

Se qualcuno potesse sottolineare il mio errore che sarebbe grande!

Adam

È stato utile?

Soluzione

Il 2 ° linea agisce per memorizzare una copia temporanea del esimo elemento, perché il ciclo while sovrascrive. Eppure nella vostra seconda ultima riga che stai leggendo dal valore sovrascritto. Modificare il codice al seguente e dovrebbe funzionare (modifiche commentato):

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
}

Altri suggerimenti

È necessario scambiare oggetti particella, non i valori delle proprietà x coordinate. Prova:

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top