¿Cómo puedo realizar una ordenación por inserción pero comprueba una propiedad del elemento de la matriz, no sólo el elemento?

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

Pregunta

Lo siento, estoy seguro de que esto es simple, pero estoy cansado y no puedo entenderlo.

I tienen una serie de elementos, cada elemento es de hecho una partícula que es una estructura de datos (una struct en c) que contiene, entre otras cosas, la partículas de posición actual (int x, y, z). Quiero comparar la posición x de los elementos no sólo del propio elemento.

En cuanto a los href="http://en.wikipedia.org/wiki/Insertion_sort" en la wikipedia , he intentado modificarlo para comparar la atribuyo yo quiero pero creo que he hecho algo (probablemente sencilla) equivocado.

Esto es lo que he modificado:

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 alguien podría señalar mi error que sería grande!

Adam

¿Fue útil?

Solución

Su segunda línea actúa para almacenar una copia temporal del elemento i, debido a que el bucle while sobrescribe. Sin embargo, en su segundo última línea que está leyendo a partir del valor sobrescribe. Cambiar el código para la siguiente y debería funcionar (cambios comentados):

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
}

Otros consejos

Es necesario intercambiar objetos de partículas, no los valores de las coordenadas x. Proveedores:

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top