كيف يمكنني إجراء فرز الإدراج ولكن التحقق من خاصية العنصر في الصفيف ليس فقط العنصر؟

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

سؤال

آسف، أنا متأكد من أن هذا بسيط ولكن أنا متعب ولا أستطيع معرفة ذلك.

لدي مجموعة من العناصر، كل عنصر في الواقع جسيم يمثل بنية بيانات (بنية في ج) تحتوي على، من بين أمور أخرى الموضع الحالي للجزيئات (INT X، Y، Z). أريد مقارنة المكونات X الموقف وليس فقط العنصر نفسه.

أنظر إلى pseudocode على ويكيبيديا, لقد حاولت تعديلها لمقارنة السمة التي أريدها ولكني أعتقد أنني فعلت شيئا (ربما بسيطة) خطأ.

إليك ما قمت بتعديله:

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

إذا كان شخص ما يمكن أن يشير إلى خطأي سيكون رائعا!

آدم.

هل كانت مفيدة؟

المحلول

يعمل خطك الثاني لتخزين نسخة مؤقتة من عنصر إيث، لأن الحلقة أثناء الكتابة عليه. ومع ذلك في السطر الأخير الثاني الذي تقرأه من القيمة المكتملة. تغيير الرمز الخاص بك إلى ما يلي وينبغي أن يعمل (التغييرات المعروضة):

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 ];
    /* ... */
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top