اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

اسف السؤال يتعلق بالخوارزميات و ليس الdata structure. أعذرني من فضلك.

السؤال عن خوارزميه الselection sort. في هذا الكود, لماذا لا يظهر الرقم 7:

#include <cs50.h>
#include <stdio.h>


int main(void)
{
    int numbers[] = {4, 7, 2, 6, 3, 1, 2};
    int max,
        LEN = 7,
        tmp;

    for (int i = LEN - 1; i >= 0; i--)
    {
        max = 0;
        for (int j = 0; j <= i; j++)
        {
            if (numbers[max] < numbers[j])
                max = j;
        }
        // now I have the max index. swap it now.
        // swap between numbers[max] & numbers[LEN - 1]
        tmp = numbers[max]; // tmp 6
        numbers[max] = numbers[LEN - 1]; // 2
        numbers[LEN - 1] = tmp;
        LEN --;
    }

    for (int i = 0; i < 6; i++)
    {
        printf("%d ", numbers[i]);
    }
    printf("\n");
}

و سؤال اخر, من فضلك. ما الوقت الذي يستغرقه دراسه خوارزميه مثل selection sort. لأنني أشعر انني اخذ وقتا اكثر من اللازم في فهم و تطبيق تلك الخوارزميات.

و شكرا علي مجهودكم الطيب.

  • 0
نشر

هنا:

for (int i = 0; i < 6; i++)
{
    printf("%d ", numbers[i]);
}

الحلقة تبدأ من i = 0 والشرط هو i < 6، بالتالي ستستمر طالما أن i تساوي 0, 1, 2, 3, 4, 5 وعندما تصل قيمة i إلى 6، يصبح الشرط 6 < 6 غير صحيح false، فتتوقف الحلقة.

لذا الكود يطبع فقط العناصر من numbers[0] إلى numbers[5]، ويتجاهل تماماً العنصر الأخير numbers[6] الذي يحتوي على الرقم 7.

الصحيح هو:

for (int i = 0; i < 7; i++)
{
    printf("%d ", numbers[i]);
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...