どのように私は挿入ソートを行うが、配列だけではなく、要素内の要素のプロパティを確認することができますか?

StackOverflow https://stackoverflow.com/questions/789773

質問

申し訳ありませんが、私はこれは簡単です確信しているが、私は疲れているし、それを把握することはできません。

Iは素子のアレイを有し、各要素は、実際には、とりわけデータ構造(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];
}

誰かが素晴らしいことだ私のミスを指摘することができれば!

アダム

役に立ちましたか?

解決

あなたの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
}

他のヒント

あなたはパーティクルオブジェクトではなく、X座標の値を交換する必要があります。試してみてください。

 for (i = 1; i<length; i++) {
    value = particles[ i ];
    /* ... */
scroll top