0

抱歉,我确定这很简单,但我很累,无法弄清楚。

我有一个元素数组,每个元素实际上是一个粒子,它是一个数据结构(c 中的结构),其中包含粒子当前位置(int x,y,z)。我想比较元素 x 位置而不仅仅是元素本身。

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

如果有人能指出我的错误,那就太好了!

亚当

4

2 回答 2

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
}
于 2009-04-25T21:43:24.943 回答
1

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

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
于 2009-04-25T21:41:18.973 回答