0

申し訳ありませんが、これは簡単だと思いますが、疲れていて理解できません。

私は要素の配列を持っています、各要素は実際には粒子の現在の位置(int x、y、z)を含むデータ構造(cの構造体)である粒子です。要素自体だけでなく、要素の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];
}

誰かが私の間違いを指摘できれば、それは素晴らしいことです!

アダム

4

2 に答える 2

4

2行目は、whileループによって上書きされるため、i番目の要素の一時的なコピーを格納するように機能します。しかし、最後から2番目の行では、上書きされた値から読み取っています。コードを次のように変更すると、機能するはずです(変更はコメント化されています)。

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 に答える