Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

الترتيب الفقاعي

آخر تحديث

يمر الترتيب الفقاعي عبر القائمة مرارًا وتكرارًا، ويقارن كل زوج من العناصر المتجاورة، ويبدّل بينهما إذا كانا في الترتيب الخاطئ. بعد كل تمريرة كاملة تكون أكبر قيمة متبقية قد "طفت" إلى موضعها الصحيح في النهاية، لذا تنظر كل تمريرة إلى عنصر أقل. اضغط تشغيل في الأعلى لمشاهدة المقارنات وعمليات التبديل، أو تنقّل بينها خطوة واحدة في كل مرة.

إنها إحدى أبسط خوارزميات الترتيب فهمًا، ما يجعلها خوارزمية أولى رائعة، لكن زمن تشغيلها O(n²) يجعلها غير عملية للمدخلات الكبيرة.

التعقيد الزمني والمكاني

الحالةالتعقيدملاحظات
أفضل حالةO(n)مرتبة مسبقًا، مع فحص الخروج المبكر
الحالة المتوسطةO(n²)ترتيب عشوائي
أسوأ حالةO(n²)مرتبة بترتيب عكسي
المساحةO(1)في المكان، متغير مؤقت واحد فقط
مستقرةنعمتحتفظ العناصر المتساوية بترتيبها النسبي

خطوة بخطوة

الخطوةما الذي يحدث
1ابدأ من بداية المصفوفة.
2قارن العنصر الحالي بالعنصر التالي.
3إذا كانا في ترتيب خاطئ، بدّل بينهما.
4تحرك موضعًا واحدًا إلى اليمين وكرر حتى النهاية (تمريرة واحدة).
5كرر التمريرات؛ كل تمريرة تثبّت عنصرًا إضافيًا في النهاية.
6توقف عندما لا تُجري تمريرة كاملة أي عملية تبديل.

مثال محلول

ترتيب [5, 2, 4, 1]:

التمريرةالمصفوفةالإجراء
1[2, 4, 1, 5]بدّل 5,2، ثم 5,4، ثم 5,1؛ يطفو 5 إلى النهاية.
2[2, 1, 4, 5]2,4 بالترتيب الصحيح؛ بدّل 4,1؛ 4,5 بالترتيب الصحيح؛ استقر 4 الآن.
3[1, 2, 4, 5]بدّل 2,1؛ البقية بالترتيب الصحيح مسبقًا؛ استقر 2.
4[1, 2, 4, 5]لا تُجري تمريرة كاملة أي تبديل، لذا فالمصفوفة مرتبة وتتوقف الخوارزمية.

متى تستخدم الترتيب الفقاعي

استخدمه عندماتجنّبه عندما
تُعلّم أو تتعلم كيف تعمل خوارزميات الترتيب القائمة على المقارنةترتّب مدخلات كبيرة، حيث يكون O(n²) بطيئًا جدًا
يكون المدخل صغيرًا جدًا أو شبه مرتب (مع الخروج المبكر يقترب من O(n))تحتاج إلى أسرع ترتيب عام الغرض — استخدم quicksort أو merge sort
تريد ترتيبًا مستقرًا في المكان بشيفرة شبه معدومةتكون البيانات بترتيب عشوائي والأداء مهم
تكتشف في تمريرة واحدة ما إذا كانت قائمة قصيرة مرتبة مسبقًاتكون عمليات الكتابة الكثيرة مكلفة (مثل ذاكرة فلاش)؛ يُجري ترتيب الاختيار عمليات تبديل أقل

كود Bubble Sort

تنفيذ نظيف وقابل للتشغيل لخوارزمية Bubble Sort بلغات Python, JavaScript, Java, C++, C. اختر لغة، وانسخ الكود، أو افتحه محمّلًا مسبقًا في ساحة تجربة Coddy.

كود Bubble Sort بلغة Python

Python
1def bubble_sort(a):2    n = len(a)3    for i in range(n - 1):4        swapped = False5        for j in range(n - 1 - i):6            if a[j] > a[j + 1]:7                a[j], a[j + 1] = a[j + 1], a[j]8                swapped = True9        if not swapped:10            break  # no swaps means the list is already sorted11    return a12
13
14nums = [5, 1, 4, 2, 8]15print("Before:", nums)16bubble_sort(nums)17print("After: ", nums)
شغّل هذا الكود في ساحة تجربة Python

الأسئلة الشائعة حول الترتيب الفقاعي

ما هو التعقيد الزمني للترتيب الفقاعي؟
يعمل الترتيب الفقاعي بزمن O(n²) في الحالتين المتوسطة والأسوأ بسبب الحلقات المتداخلة. مع تحسين الخروج المبكر يمكنه بلوغ O(n) على مصفوفة مرتبة مسبقًا. ويستخدم مساحة إضافية قدرها O(1).
هل الترتيب الفقاعي مستقر؟
نعم. يبدّل الترتيب الفقاعي بين العناصر المتجاورة فقط عندما تكون في ترتيب خاطئ تمامًا، لذا لا تتجاوز العناصر المتساوية بعضها أبدًا وتحتفظ بترتيبها النسبي الأصلي.
لماذا يُسمى الترتيب الفقاعي؟
في كل تمريرة تتحرك أكبر قيمة غير مرتبة خطوة بخطوة نحو نهاية المصفوفة، كما تصعد الفقاعة إلى السطح — ومن هنا جاء اسم "الفقاعي".
ما الفرق بين الترتيب الفقاعي وترتيب الإدراج؟
كلاهما يعمل بزمن O(n²) وهما مستقران وفي المكان، لكنهما يحركان البيانات بطريقة مختلفة: يبدّل الترتيب الفقاعي مرارًا الأزواج المتجاورة غير المرتبة، بينما يأخذ ترتيب الإدراج كل عنصر ويزلقه إلى موضعه الصحيح داخل البادئة المرتبة. عادةً ما يُجري ترتيب الإدراج عمليات كتابة أقل ويكون أسرع عمليًا، خصوصًا على البيانات شبه المرتبة.
متى ينبغي أن أستخدم الترتيب الفقاعي بدلاً من quicksort؟
نادرًا جدًا في أعباء العمل الحقيقية — فالزمن المتوسط O(n log n) لـ quicksort يسحق O(n²) للترتيب الفقاعي في كل شيء عدا المدخلات الصغيرة جدًا. لا يستحق الترتيب الفقاعي الاستخدام إلا عندما تكون القائمة صغيرة جدًا أو شبه مرتبة، أو عندما تريد أبسط ترتيب مستقر ممكن لأغراض التعليم.
هل يغيّر تحسين الخروج المبكر أسوأ حالة للترتيب الفقاعي؟
لا. يتيح تتبّع ما إذا أجرت التمريرة أي تبديل للترتيب الفقاعي أن يتوقف مبكرًا ويبلغ O(n) على مدخل مرتب مسبقًا، لكن مصفوفة مرتبة عكسيًا لا تزال تحتاج إلى كل المقارنات، لذا تبقى أسوأ حالة O(n²). لا يساعد هذا التحسين إلا في أفضل حالة والحالات شبه المرتبة.
Coddy programming languages illustration

أتقن الخوارزميات مع Coddy

ابدأ الآن