Como posso realizar uma ordenação por inserção, mas verificar uma propriedade do elemento na matriz não apenas o elemento?
-
16-09-2019 - |
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
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 ];
/* ... */