يعد Bubble Sort أحد أبسط خوارزميات الفرز في البرمجة. فهو يتنقل بشكل متكرر عبر التسلسل المطلوب فرزه، ويقارن عنصرين في كل مرة ويتبادلهما إذا كانا في الترتيب الخاطئ. كرر عمل زيارة المصفوفة حتى لا يكون هناك المزيد من العناصر التي تحتاج إلى تبادل، مما يعني أنه تم فرز المصفوفة.
يشبه فرز الفقاعات الفقاعات الخارجة من الماء، في الفرز الفقاعي يكون العدد الأصغر أو الأكبر، اعتمادًا على ما إذا كنا نقوم بفرز المصفوفة بترتيب تصاعدي أو تنازلي، تنبثق الفقاعات في اتجاه بداية المصفوفة أو نهايتها.
1) قارن بين العناصر المتجاورة إذا كان الأول أكبر من الثاني، قم بتبديلهما.
2) افعل الشيء نفسه مع كل زوج من العناصر المتجاورة، بدءًا من الزوج الأول وانتهاءً بالزوج الأخير، وعند هذه النقطة يجب أن يكون العنصر الأخير هو أكبر عدد.
3) كرر الخطوات المذكورة أعلاه لجميع العناصر باستثناء العنصر الأخير.
4) استمر في تكرار الخطوات المذكورة أعلاه لعدد أقل وأقل من العناصر حتى لا يكون هناك أزواج من الأرقام للمقارنة.
أداء الفرز الفقاعي ضعيف مقارنة بخوارزميات الفرز الأخرى مثل الفرز السريع أو الفرز المدمج أو الفرز الصدفي. متوسط تعقيد الحالة لهذه الخوارزميات هو O(nlogn)، في حين أن متوسط تعقيد الحالة لفرز الفقاعات هو O(n^2).
في أفضل الأحوال، يكون الفرز الفقاعي أفضل من الفرز السريع بأداء O(n). يعد فرز الفقاعات أبطأ بثلاث مرات من الفرز السريع أو الفرز المدمج، حتى مع n = 100، ولكنه أسهل في التنفيذ والتذكر.
تعقيد وأداء نوع الفقاعة كما يلي:
1) أسوأ أداء لفرز الفقاعات هو O(n^2)
2) أفضل أداء لحالة فرز الفقاعات هو O(n)
3) متوسط أداء فرز الفقاعات هو O(n^2)
// فرز الفقاعة publicstaticvoidbubbleSort(int[]arr){// يتم استخدام الحلقة الخارجية للتحكم في عدد دورات حلقة المصفوفة for(inti=0;i<arr.length-1;i++){// الداخلية يتم استخدام الحلقة لإكمال مقارنة قيم العناصر وتبديل قيم العناصر الأكبر إلى الخلف for(intj=0;j<arr.length-1-i;j++){if(arr[j]>arr [j+1]){inttemp= arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}// نتيجة الإخراج for(intn:nums){System .out.println(n);} }
على سبيل المثال:
publicclassMain{publicstaticvoidmain(String[]args){inta[]={6,1,15,32,9};for(inti=1;i<a.length;i++){for(intj=0;j<a .length-1;j++){if(a[j]>a[j+1]){inttemp=a[j];a[j]=a[j+1];a[j+1]=temp ;}}}System.out.println(نتيجة فرز الفقاعات هي:);for(inttemp:a){System.out.print(temp+);}}}
نتائج التشغيل هي كما يلي:
نتيجة الفرز الفقاعي هي: 1691532
يمكنك تجربتها بنفسك!