الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

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

مغلق
بدأه Sultan_Althibity في 29 مارس 2006 · 2 رد · 8,377 مشاهدة · في الرياضيات والخوارزميات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

لإعطاء هذا القسم دفعـة قويـة للأمام ... وضعت هذا الموضوع من كتاب الإكسير:

تصنيف الفقاعات Bubble Sorting :

تعتبر هذه الطريقـة هـي طريقـة فرز وتصنيف ، وقد تتساءل عـن فائدة التصنيف أو الفرز والذي يعـني ترتيب البيانات وفق ترتيب معـين ، الفائدة الكبرى هـو تسهيل عـملية البحث على الحاسب وبالتالي القدرة على التعامل مع كثير من البيانات بكفاءة كما أن هذا يمهـد لاعتماد طريقـة البحث الثنائي والتي هـي أفضل وأسرع بكثير من طريقـة البحث المتسلسل أو المتتالي ، سنتعرض في هذا الموضوع على إحدى الخوارزميات وهـي خـوارزمية تصنيف الفقاعات، هذا أحد الامثلة التي حصلت عليها من أحد الكتب يبين لك كيف تنظيم المعلومات بواسطـة تصنيف الفقاعات:

اقتباس
عـناصر المصفوفة التي نـود ترتيبها أو فرزها

50

32

93

2

74

الخطوة الاولى يقارن البرنامج بين العـنصر الاول والثاني. ولأن 32

هـي أصغر من 50 فإنه يبادل بين أمكنتهـم

32

50

93

2

74

من ضمن الخطوة الاولى يقارن البرنامج بين العنصر الأول والثالث ولأن 32

أصغر من 93 فلا يفعل شيء، الآن سيقارن بين العـنصر الاول والعـنصر الرابع

وسيبادل بين أماكنهم

2

50

93

32

74

من ضمن الخطوة الأولى أيضاً يقارن البرنامج بين العـنصر الأول والعـنصر الأخير 2 و 74 ولن يقوم بأي حركـة وبالتالي تنتهي الخطوة الأولى

الخطوة الثانية يقارن فيها البرنامج العـنصر الثاني ببقية العناصر، وسيقارن الآن بين العـنصر 50 و93 وسيتركهـم وسيقوم بعد ذلك بتبديل مكان العنصر

الثاني بالعنصر الثالث وسيبدل أماكنهـم

2

32

93

50

74

من ضمن الخطوة الثانية يقارن البرنامج بين بين العـنصر الثاني 32 والأخير74 ولن يقوم بتحريكهـم وبالتالي نتتهي الخطوة الثانية

الخطوة الثالثة يقارن فيها البرنامج العنصر الثالث ببقية العناصر ، وسيقارن أولا الرقم 93 بالرقم 50 وسيقوم بتحريك القيمتين وتبديل أماكنهـم

2

32

50

93

74

من ضمن الخطوة الثالثة يقارن البرنامج القيمة 50 بالقيمة 74 ولن يقوم بتبديل الأماكن.

ينتقل البرنامج إلى الخطوة الرابعـة وهـي آخر خطوة وفيها سيقارن العنصر الرابع بالعـنصر الأخير ولن يقوم بتبديل الأماكن وهـكذا يصبح شكل المصفوفة

مرتباً

الآن سنقوم بجعل هذه الخوارزمية إلى كـود وأول ما نـود القيام به هـو معرفة كم حلقة تكرارية نقوم بها والجواب هـو حلقتين اثنتين ، فكما ترى فإن البرنامج يتحرك حول العـناصر وهذه الحلقة الأولى ثم يقارن هذه العـناصر بالعـناصر التي تليها وهذه هي الحلقة الثانية ، الآن علينا معرفة كم عـدد المرات التي تتحركها الحلقات والجواب بسيط في الحلقة الأولى تحرك البرنامج في مثالنا السابق أربع خطوات أي أن الحلقة الأولى تتحرك (عدد عـناصر المصفوفة – 1 ) أما الحلقة الثانية فهي تتحرك ببساطـة ( عـدد عـناصر المصفوفة – رقم الخطوة التي وصلت إليها الحلقة الثانية).

الآن سنقوم بكتابة الكـود الذي ينظم هذه العـملية ، وهـو كالتالي:

1.	#include <iostream>
2.	using namespace std;
3.	
4.	int main()
5.	{
6.  int array[5]={50,32,93,2,74};
7.  int sure=0;
8.  int x=0;
9.  cout << "Here is the Array befor sorted\n";
10.  for (int j=0;j<5;j++)
11. 	 cout << array[j] << endl;
12.	
13.  for (int i=0;i<5-1;i++) {
14. 	 sure=0;
15. 	 for (int j=i; j<5;j++) {
16.    if (array[j] <array) {
17.   	 x=array[j];
18.   	 array[j]=array;
19.   	 array=x;
20.   	 sure=1;
21.    }
22. 	 }
23. 	 if (sure ==0) break;
24.  }
25.	
26.  cout << "Here is the Array after sorted\n";
27.  for (i=0;i<5;i++)
28. 	 cout << array << endl;
29.	
30.  return 0;
31.	}

سأترك لك شرح الكـود الحالي وفي حال عـدم فهـمك له فعـد للكلام عـن تصنيف الفقاعات النظري وحاول أن تفهـم المثال الذي جلبته إليه لفهـم خوارزمية تصنيف الفقاعات.

1
#2

كانت مسالة في الامتحان الماضي, مصفوفيتن, الارقام مرتبة تصاعديا (افتراض), المطلوب دمج المصفوفتين في مصفوفة واحدة والترتيب تصاعديا مع الدمج (اثناء المقارنة). كنت متاكد باذن الله ان خوارزميتي صحيحة 100%, مع هذا لم احظ بدرجة واحدة :blink:

شكرا اخي سلطان على الشرح الواضح والكافي.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

السلام عليكم

هام جداً فى الخوارزميات حساب الوقت المستغرق, بالنسبة للخوارزمية التى وضعها اخونا سلطان يمكننا حساب الوقت على النحو التالي:

قامت الخوارزمية فى السطر السابع والثامن بإعطاء قيمة وهذه الحالة تتم فى خطوة واحدة إذاً

mimetex.cgi?O(1)

فى السطر العاشر والسطر الحادي عشر قامت بعمل حلقة يتم فيها كتابة محتويات المصفوفة وهذه تستغرق

mimetex.cgi?O(n)

و n فى هذه الحالة هى عدد محتويات المصفوفة ولكن لا يتم إستبدال الحرف بالرقم 5 لاننا نبحث عن سرعة الخوارزمية فجميع الحالات وليس فقط للحالة عندما تكون المصفوفة تساوى 5

فى السطور من 13 إلى 24 نلاحظ ان هناك حلقة وبداخلها حلقة وبداخل الحلقة الثانية هناك مقارنة دعونى اكتب ملخص لما يحدث هنا فى عدة سطور

السطر 13

mimetex.cgi?O(n)

السطر 14

mimetex.cgi?n*O(1)=O(n)

السطر15

mimetex.cgi?n*O(n)=O(n^2)

السطر 16

mimetex.cgi?n*n*O(1)=O(n^2)

السطر 17 و18 و 19 و 20

mimetex.cgi?n*n*O(1)=O(n^2)

السطر 23لاحظ ان هذا السطر خارج الحلفة الثانية

mimetex.cgi?n*O(1)=O(n)

فى حساب الخوارزميات ناخذ اكبر قيمة وهى

mimetex.cgi?O(n^2)

إذاً سرعة الخوارزمية بإستخدام bubble sort تستغرق

mimetex.cgi?O(n^2)

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

هذا الموضوع مغلق.

مواضيع مشابهة