Como posso realizar uma ordenação por inserção, mas verificar uma propriedade do elemento na matriz não apenas o elemento?

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

Pergunta

Desculpe, eu tenho certeza que isso é simples, mas eu estou cansado e não consigo entender.

I tem uma série de elementos, cada elemento é, de facto, uma partícula que é uma estrutura de dados (uma estrutura em c) contendo, entre outras coisas, a posição actual (int x, y, z) partículas. Eu quero comparar a elementos x posição não apenas o próprio elemento.

Olhando para o na wikipedia , eu já tentou modificá-lo para comparar o atribuir eu quero, mas eu acho que fiz alguma coisa (provavelmente simples) errado.

Aqui está o que eu tenho 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];
}

Se alguém poderia apontar meu erro que seria ótimo!

Adam

Foi útil?

Solução

Seu 2ª linha age para armazenar uma cópia temporária do elemento om, porque o while loop substitui-lo. No entanto, em sua 2ª última linha que você está lendo a partir do valor substituído. Alterar o código para o seguinte e ele deve funcionar (alterações comentadas):

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
}

Outras dicas

Você precisa objetos troca de partículas, não os valores das coordenadas x. Tente:

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top