ملخص
فرز الفقاعات هو خوارزمية فرز بسيطة. إنه يزور التسلسل المراد فرزه بشكل متكرر ، ويقارن عنصرين في وقت واحد ، ويقايذهما إذا كانت غير صحيحة. يتم تكرار عمل زيارة التسلسل حتى يتم فرز التسلسل. أصل هذه الخوارزمية هو أنه كلما كان العنصر الأصغر "يطفو" ببطء إلى بداية التسلسل من خلال التبادل.
بعبارة ببساطة ، هو:
يعد فرز الفقاعات أكثر من شخصيات أكبر تغرق خلف الصفيف (يمكن فهمها على النحو أدناه) ، وتطفو الشخصيات الأصغر في المقدمة (أعلاه).
مخطط التفسير البديهي:
خطوة
قارن العناصر المجاورة. إذا كان الأول أكبر من الثانية ، فتبادلهما للاثنين.
قم بنفس العمل لكل زوج من العناصر المجاورة ، بدءًا من الزوج الأول إلى الزوج الأخير في النهاية. في هذه المرحلة ، يجب أن يكون العنصر الأخير هو أكبر عدد.
كرر الخطوات المذكورة أعلاه لجميع العناصر باستثناء آخرها.
استمر في تكرار الخطوات المذكورة أعلاه لعناصر أقل وأقل في كل مرة حتى لا تكون هناك أزواج من الأرقام التي يجب مقارنتها.
مثال
البيانات الخام:
3 5 2 6 2
الجولة الأولى
إن مقارنة 3 و 5 ، 5 ، 5 ، لا يوجد أي تبادل 3 5 2 6 2 تقارن 5 و 2 ، 5 أكبر من 2 ، موضع التبادل 3 2 5 6 2 ، تواصل مقارنة 5 و 6 ، 6 أكبر من 5 ، لا يوجد تبادل 3 2 5 6 2 مستمر في مقارنة 6 و 2 ، 6 ، هو موضع التبادل 3 2 5 2 66 مع النهاية ، كلاهما تصعيدًا (مقتربين) على التوالي.
الجولة 2
المقارنة 3 و 2 ، 3 أكبر من 2 ، موضع التبادل 2 3 5 2 6 المقارنة 3 و 5 ، 5 أكبر من 3 ، لا يوجد تبادل 2 3 5 2 6 المقارنة 5 و 2 ، 5 أكبر من 2 ، موضع التبادل 2 3 2 5 6 لا حاجة لمقارنة 5 و 6
الجولة الثالثة
المقارنة 2 و 3 ، 3 أكبر من 2 ، لا حاجة لتبادل 2 3 2 5 6 المقارنة 3 و 2 ، 3 أكبر من 2 ، لا حاجة لمقارنة موضع البورصة 2 2 3 5 6
الجولة 4
قارن 2 و 2 بدون تبادل 2 2 3 5 6
أربع جولات نهاية
2 2 3 5 6
تنفيذ الكود (Java)
package com.coder4j.main.arithmetic.sorting ؛ فقاعة الفئة العامة { / ** * bubble sort * * param array * RETURN * / public static int [] sort (int [] array) {int temp ؛ // توضح حلقة الطبقة الأولى عدد الجولات المقارنة ، مثل عناصر الطول ، وعدد الجولات المقارنة هو الطول 1 (لا حاجة للمقارنة مع نفسك) لـ (int i = 0 ؛ i <array.length - 1 ؛ i ++) {system.out.println ("thread" + (i + 1) + "start") ؛ // تتناقص الطبقة الثانية من الحلقة ، كل مقارنتين مجاورتين مرة واحدة ، ويتقل عدد المرات مع زيادة عدد الجولات. تحدد كل جولة أكبرها ، وليس هناك حاجة لمقارنة أكبرها لـ (int j = 0 ؛ j <array.length - 1 - i ؛ j ++) {if (Array [j+1] <array [j]) {temp = array [j] ؛ صفيف [j] = صفيف [j + 1] ؛ صفيف [j + 1] = temp ؛ } system.out.println ("th" + (i + 1) + "round ،" th " + (j + 1) +" مقارنة: } system.Out.println () ؛نتائج اختبار الإخراج:
2 3 5 6 6 3 3 5 6 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 النتيجة النهائية 2 2 3 5 6
بعد الاختبار ، يتوافق مع النتائج في المثال.