ترتيب\_الفقاعات
**فرز فقاعي** (بالإنجليزية: Bubble sort)‏ هي خوارزمية ترتيب منتقدة لبطئها ، هي تعمل على رفع العنصر الأكبر كفقاعة الهواء التي ترتفع إلى أعلى وذلك بترتيب العناصر بتتابع، أي نقوم بمقارنة العنصرين الأول والثاني، ونحتفظ بالعنصر الأكبر، ونبدل الأماكن إذا كانا غير مرتبين، ونقوم بهذه العملية إلى آخر عنصر، وبعد ذلك نعيد العمليات إلى المكان ما قبل الأخير وهكذا دواليك، ثم نتوقف عند وجود جدول بالبعد 1 أو عندما لا نقوم بالتبديلات عند آخر عملية.

لترتيب N عناصر في المصفوفة A ، عدد المقارنات سيكون: {\displaystyle {N(N-1) \over 2}=\sum \_{i=0}^{N}x\_{i}}.

أما عدد التبديلات فهو في المتوسط {\displaystyle N(N-1) \over 4}. حيث N هي عدد العناصر.

تعقيد الخوارزم هو {\displaystyle {\mathcal {O}}\left(n^{2}\right)} في المعدل، و{\displaystyle {\mathcal {O}}\left(n\right)} في الحالة المثلى.

خوارزمية ترتيب الفقاعات
-----------------------

````
**procedure** bubbleSort(A **:** list of sortable items) **defined as:**
**do**
swapped := false
**for each** i **in** 0 **to** length(A) - 2 **inclusive do:**
**if** A[ i ] > A[ i + 1 ] **then**
 swap(A[ i ], A[ i + 1 ])
 swapped := true
**end if**
**end for**
**while** swapped
**end procedure**
````

في الاستخدام العملي
-------------------

مع أن ترتيب الفقاعات هو أحد أسهل الخوارزمات للفهم والتطبيق، إلا أن تعقيده الزمني {\displaystyle {\mathcal {O}}\left(n^{2}\right)} يجعل كفائته تقل كلما زاد طول المدخل، هذا يجعل منه خوارزم غير ملائم لترتيب مصفوفات كبيرة. خوارزمات أخرى بتعقيد {\displaystyle {\mathcal {O}}\left(n^{2}\right)} مثل الترتيب بالإدراج تتمكن من حل المشكلة بكفائة أعلى.

بسبب بساطة الخوارزم يتم استخدامه كأول مثال لخوارزم ترتيب يتعلمه طلاب علم الحاسوب. لكن بعض الباحثين مثل Owen Astrachan ينصحون بالابتعاد عن هذا الخوارزم وعدم استخدامه حتى في التعليم.

قاموس The Jargon File الذي سمى خوارزم Bogosort ب«المثال الأعلى لخوارزم شنيع» سمى خوارزم الترتيب بالفقاعات «خوارزم سيء». في كتاب فن برمجة الحاسوب يستنتج دونالد كانوث «لا يوجد سبب للنظر في خوارزم ترتيب الفقاعات الا اسمه الجميل وكونه يولد بعض المشاكل النظرية المثيرة للاهتمام», ثم يقوم بذكر بعض هذه المشاكل النظرية.

ترتيب الفقاعات بلغات مختلفة
---------------------------

### كود ترتيب الفقاعات بلغة C

```
 typedef int tab\_entiers[MAX];
 void bubble\_sort(tab\_entiers t) {
 int i، j، tmp;
 for(i = 1 ; i < MAX ; i++)
 for(j = 0 ; j < MAX - i ; j++)
 if(t[j] > t[j+1]) {
 tmp = t[j+1];
 t[j+1] = t[j];
 t[j] = tmp;
 }
 }

```

### كود ترتيب الفقاعات بلغة Java

```
 [MAX];
 public class Bubble\_sort {

 /\*\*
 \* @param args
 \*/
 public static void main(String[] args) {
 
 int name[]= {20,10,-5,6,2,1};
 int a = 0 ;
 for (int x = 0; x < name.length; x++) 
 System.out.print(name[x]+" ");
 System.out.println();

 for (int x = name.length - 1 ; x > 0; x--) {
 for (int y = 0; y < name.length-1; y++) {
 int temp = name[y];
 int temp2 = name[y+1]; 
 if(name[y] > name[y+1]) {
 name[y] = temp2;
 name[y+1]= temp ;
 a++ ;
 for (int m = 0; m < name.length; m++) 
 System.out.print(name[m]+" ");
 System.out.println(); 
 

 } 
 } System.out.println();

 }
 for (int v = 0; v < name.length; v++) 
 System.out.print(name[v]+" ");
 System.out.println();
 System.out.println("the num of changes of the array is "+a);

 
 }
 }
}
 }

```

مراجع
-----

1. ↑  [أ] *معجم الحاسبات* (بالعربية والإنجليزية) (ط. 3). القاهرة: مجمع اللغة العربية بالقاهرة. 2003. ص. 47. ISBN:978-977-01-8550-6. OCLC:784561745. QID:Q113638576.  
[ب] *معجم المصطلحات المعلوماتية* (بالعربية والإنجليزية)، دمشق: الجمعية العلمية السورية للمعلوماتية، 2000، ص. 63، OCLC:47938198، QID:Q108408025
2. ↑  Donald Knuth.
3. ↑  Cortesi، Aldo (27 أبريل 2007). "Visualising Sorting Algorithms". مؤرشف من الأصل في 2017-07-07. اطلع عليه بتاريخ 2017-03-16.
4. ↑  
"jargon, node: bogo-sort". مؤرشف من الأصل في 2017-05-05.
5. ↑  Astrachan، Owen (2003). "Bubble sort: an archaeological algorithmic analysis" (PDF). *ACM SIGCSE Bulletin*. ج. 35 ع. 1: 1–5. DOI:10.1145/792548.611918. ISSN:0097-8418. مؤرشف من الأصل (PDF) في 2015-09-23.
6. ↑  Owen Astrachan. Bubble Sort: An Archaeological Algorithmic Analysis. SIGCSE 2003 Hannan Akhtar. (pdf) نسخة محفوظة 15 سبتمبر 2009 على موقع واي باك مشين.
7. ↑  "jargon, node: bogo-sort". *www.jargon.net*. مؤرشف من الأصل في 2017-05-05. اطلع عليه بتاريخ 2016-12-30.

| * ع
* ن
* ت
خوارزميات الترتيب |
| --- |
| Theory | 
* نظرية التعقيد الحسابي
* تمثيل O الكبرى
* ترتيب كلي
* قائمة (نوع بيانات مجرد)
* خوازمية موضعية
* خوارزمية ترتيب
* Comparison sort
* Adaptive sort
* Sorting network
* Integer sorting
* X + Y sorting
* Transdichotomous model
* Quantum sort

 |
| Exchange sorts | 
* فرز فقاعي
* Cocktail shaker sort
* Odd–even sort
* ترتيب المشط
* Gnome sort
* ترتيب سريع
* Slowsort
* Stooge sort
* ترتيب غبي

 |
| خوارزمية الاختيار | 
* ترتيب انتقائي
* تصنيف الكومة
* Smoothsort
* Cartesian tree sort
* Tournament sort
* Cycle sort
* Weak-heap sort

 |
| Insertion sorts | 
* ترتيب بالإدراج
* Shellsort
* Splaysort
* Tree sort
* Library sort
* Patience sorting

 |
| Merge sorts | 
* تصنيف دمجي
* Cascade merge sort
* Oscillating merge sort
* Polyphase merge sort

 |
| Distribution sorts | 
* American flag sort
* Bead sort
* Bucket sort
* Burstsort
* Counting sort
* Interpolation sort
* Pigeonhole sort
* Proxmap sort
* Radix sort
* Flashsort

 |
| Concurrent sorts | 
* Bitonic sorter
* Batcher odd–even mergesort
* Pairwise sorting network
* Samplesort

 |
| Hybrid sorts | 
* Block merge sort
* Kirkpatrick-Reisch sort
* Timsort
* Introsort
* Spreadsort
* Merge-insertion sort

 |
| Other | 
* Topological sorting
	+ Pre-topological order
* Pancake sorting
* Spaghetti sort

 |

* أيقونة بوابةبوابة خوارزميات
* أيقونة بوابةبوابة رياضيات
* أيقونة بوابةبوابة علم الحاسوب

|  |  |
| --- | --- |
| مشاريع شقيقة | في كومنز صور وملفات عن: فرز فقاعي |