我怎么能执行一个插入排序,但阵列不仅仅是元素检查元素的属性?
-
16-09-2019 - |
题
对不起,我敢肯定,这是简单的,但我累了,不能看着办吧。
我有元件的阵列,每个元件是实际上的颗粒,其为含有一个数据结构(在C语言的结构体),除其他事项外的颗粒当前位置(INT的x,y,z)表示。我想比较的元素x位置而不只是元素本身。
纵观伪代码,我试图修改它比较属性我想,但我认为我做错了什么(可能简单)。
下面就是我修改的:
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];
}
如果有人能指出我的错误,这将是伟大的!
亚当
解决方案
您第二线的作用是存储所述第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
}
其他提示
您需要交换粒子对象,而不是的x坐标的值。尝试:
for (i = 1; i<length; i++) {
value = particles[ i ];
/* ... */
不隶属于 StackOverflow