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

السؤال

نشر

سلام عليكم.

حاولت تطبيق خوارزميه ال Bubble Sort بلغه ال C++.


#include <iostream>
using namespace std;
#define LEN 7
int main()
{
    int numbers[] = {
        1, 2, 5, 4, 7, 9, 3
    };
    
    int tmp;
    int check;
    
    for (int i = LEN-1; i >= 0; i--)
    {
        check = 1;
        for (int j = 0; j < i; j++)
        {
            if (numbers[j] > numbers[j + 1])
            {
                check = 0;
                
                // swap numbers[j] & numbers[j+1]
                tmp = numbers[j];
                numbers[j] = numbers[j+1];
                numbers[j + 1] = tmp;
            }
        }
        
        if (check == 1) break;
    }
    
    for (int i = 0; i < LEN; i++)
    {
        cout<<numbers[i]<<"\n";
    }
}

هل هذا الكود صحيح.

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته.

الكود الذي قمت بكتابته صحيح ويعمل بشكل جيد لا توجد به مشكلة ولكن يمكن تحسينه من حيث الأسلوب وأيضا طريقة اتجاه الحلقة الخارجية حيث هذا ليس خطأ ولكنه أقل إستخدام في تطبيق Bubble Sort حيث الطريقة التقليدية تبدأ من 0 إلى LEN-1  مما يجعل الكود أكثر قابلية للقراءة. 

وإليك الكود بعد تحسين بعض الأشياء فيه :

#include <iostream>
using namespace std;
#define LEN 7

int main() {
    int numbers[LEN] = {1, 2, 5, 4, 7, 9, 3};
    
    // Bubble Sort
    for (int i = 0; i < LEN - 1; i++) {
        bool swapped = false; // متغير لتتبع حدوث التبديل
        for (int j = 0; j < LEN - 1 - i; j++) {
            if (numbers[j] > numbers[j + 1]) {
                // تبديل العناصر
                int tmp = numbers[j];
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = tmp;
                swapped = true;
            }
        }
        // إذا لم يحدث أي تبديل، فالمصفوفة مرتبة
        if (!swapped) break;
    }
    
    // طباعة المصفوفة المرتبة
    for (int i = 0; i < LEN; i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;
    
    return 0;
}

حيث قمت بتغيير اتجاه الحلقة الخارجية فإستخدمت i من 0 حتى LEN-1 بدلا من العكس مما يتماشى مع الطريقة التقليدية ل Bubble Sort.

زأيضا قمت بتغيير اسماء المتغيرات ليكون الاسم أكثر وضوح واستخدمت نوع bool بدل من int.

وفي النهاية قمت بإضافة return 0 حيث من الجيد إنهاء الدالة main بإرجاع 0 لتدل على نجاح تنفيذ البرنامج.

  • 0
نشر
بتاريخ 7 دقائق مضت قال محمد_عاطف:

وعليكم السلام ورحمة الله وبركاته.

الكود الذي قمت بكتابته صحيح ويعمل بشكل جيد لا توجد به مشكلة ولكن يمكن تحسينه من حيث الأسلوب وأيضا طريقة اتجاه الحلقة الخارجية حيث هذا ليس خطأ ولكنه أقل إستخدام في تطبيق Bubble Sort حيث الطريقة التقليدية تبدأ من 0 إلى LEN-1  مما يجعل الكود أكثر قابلية للقراءة. 

وإليك الكود بعد تحسين بعض الأشياء فيه :

#include <iostream>
using namespace std;
#define LEN 7

int main() {
    int numbers[LEN] = {1, 2, 5, 4, 7, 9, 3};
    
    // Bubble Sort
    for (int i = 0; i < LEN - 1; i++) {
        bool swapped = false; // متغير لتتبع حدوث التبديل
        for (int j = 0; j < LEN - 1 - i; j++) {
            if (numbers[j] > numbers[j + 1]) {
                // تبديل العناصر
                int tmp = numbers[j];
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = tmp;
                swapped = true;
            }
        }
        // إذا لم يحدث أي تبديل، فالمصفوفة مرتبة
        if (!swapped) break;
    }
    
    // طباعة المصفوفة المرتبة
    for (int i = 0; i < LEN; i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;
    
    return 0;
}

حيث قمت بتغيير اتجاه الحلقة الخارجية فإستخدمت i من 0 حتى LEN-1 بدلا من العكس مما يتماشى مع الطريقة التقليدية ل Bubble Sort.

زأيضا قمت بتغيير اسماء المتغيرات ليكون الاسم أكثر وضوح واستخدمت نوع bool بدل من int.

وفي النهاية قمت بإضافة return 0 حيث من الجيد إنهاء الدالة main بإرجاع 0 لتدل على نجاح تنفيذ البرنامج.

صحيح.

شرط الحلقه صار اسهل في الفهم. شيئ اخير من فضلك. اشرح لي منطق خوارزميه insertion sort لانني لا افهمه.

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

  • 0
نشر
بتاريخ 5 ساعة قال Abdelrehman Elsied:

صحيح.

شرط الحلقه صار اسهل في الفهم. شيئ اخير من فضلك. اشرح لي منطق خوارزميه insertion sort لانني لا افهمه.

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

أسهل طريقة لاستيعابها هي بتخيل أنك ترتب أوراق اللعب في يدك، كالتالي:

  1. في البداية بين يديك مجموعة من الأوراق غير المرتبة.
  2. تسحب أول ورقة وتعتبرها الجزء المرتب لأن ورقة واحدة هي دائمًا مرتبة.
  3. الآن، تسحب الورقة الثانية من الجزء غير المرتب تقارنها بالورقة الأولى التي في الجزء المرتب ولو أصغر، تضعها قبلها، وبذلك لديك ورقتان مرتبتان في يدك.
  4. تسحب الورقة الثالثة وتقارنها بالورقتين المرتبتين من اليمين إلى اليسار، ولو أكبر من كليهما، تتركها في مكانها، ولو أصغر، تستمر في مقارنتها حتى تجد مكانها الصحيح، وتُزيح الأوراق الأخرى لتوفير مساحة لها.
  5. تكرر تلك العملية أي تسحب ورقة جديدة من الجزء غير المرتب، وتُدرجها Insert في مكانها الصحيح داخل الجزء المرتب.

أي الفكرة من Insertion Sort هو بناء قائمة مرتبة بشكل تدريجي، عنصر تلو الآخر.

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...