2009-04-25 48 views
0

对不起,我确定这很简单,但我很累,无法弄清楚。如何执行插入排序但检查数组中元素的属性而不仅仅是元素?

我有元件的阵列,每个元件是实际上的颗粒,其为含有一个数据结构(在C语言的结构体),除其他事项外的颗粒当前位置(INT的x,y,z)表示。我想比较元素x位置不仅仅是元素本身。

望着pseudocode on wikipedia,我试图修改它来比较我想要的属性,但我觉得我已经做了一些(可能是简单的)错误。

下面是我修改:

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

如果有人能指出我的错误,这将是巨大的!

亚当

+0

嗯,我猜想它不工作“COS的应用即将时髦写的那部分之后,但它*可能*是别的东西,我只是觉得这是因为我很累,花了很长时间才重写它。 – 2009-04-25 21:44:54

回答

4

您的第二行用于存储第i个元素的临时副本,因为while循环会覆盖它。然而,在你的第二个最后一行中,你正在从覆盖值中读取。你的代码更改为以下,它应该工作的变化(评论):

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

非常感谢,修复它! – 2009-04-25 21:46:52

1

您需要交换粒子对象,而不是x坐标的值。尝试:

for (i = 1; i<length; i++) { 
    value = particles[ i ]; 
    /* ... */ 
相关问题