05-20-2019, 01:33 PM
|
|
Bubble Sort Algorithm
نتابع فى هذا الموضوع خوارزمية Bubble Sort Algorithm و هى احدى اشهر خوازميات الترتيب Sorting .
هدف هذه الخوارزمية هو ترتيب عناصر مصفوفة اما ترتيب تصاعدى او تنازلى.
انها من ابسط الخوارزميات و هى من خوارزميات المقارنة.
فكرة هذه الخوارزمية هى :
ملحوظة: يجب تحديد ان كنت تريد الترتيب تصاعدى ام تنازلى.
المصفوفة قبل الترتيب:
افتراضيا فى حلنا سيكون تصاعدى.
1- نمر على عناصر المصفوفة جميعا
2- عندما نجد عنصر اصغر من العنصر الذى يسبقه(قبله) نقوم بتبديلهما.
3- نمر هكذا على جميع عناصر المصفوفة حتى ننهى الدورة الاولى.
4- نعيد المرور على عناصر المصفوفة مرة اخرى و نرى ان كان هناك احد العناصر اصغر مما يسبقه و نبدلهما حتى ننهى هذه الدورة.
5- نعيدها مرارا و تكرارا حتى ننتهى تماما من ترتيبها.
الدورة الاولى
======
الدورة الثانية
======
=========================================
كود دالة الترتيب bubblesort
Code 1: كود: //bubblesort functionvoid bubblesort(int a[], const int SIZE){ for (int pass=1; pass < SIZE; pass++) //loop to specify number of passes { for (int j=0; j < SIZE-1; j++) //shorter loop to check elements of array { if (a[j] > a[j+1]) //if element > following element then swap(a[j],a[j+1]); //swap them } }} شرح الكود:
السطر 3: بداية الدالة
function arguments: array, SIZE of array
السطر 4: حلقة loop لتحديد عدد الدورات التى سوف نمر بها على المصفوفة
السطر 7: حلقة loop اقصر للمرور على جميع عناصر المصفوفة و مقارنتها ببعضها
السطر 9-10 : جملة If شرطية تحدد اذا كان عنصر اكبر مما يليه يتم تبديلهما بالدالة swap
============================================
كود دالة طباعة النتائج print
Code 2: كود: //print functionvoid print(int a[],const int SIZE){ for (int i = 0; i < SIZE; i++) //loop for passing over all array elements and { //printing them cout << a[i] << " "; } cout << endl;} شرح الكود:
السطر 3: تعريف الدالة
function parameters: array, SIZE of array
السطر 5 --< 8 : انشاء حلقة loop لطباعة جميع عناصر المصفوفة
============================
كود دالة التبديل swap Code 3:=cpp>=cpp> كود: //swap functionvoid swap(int& x, int& y){ int temp; temp = x; x = y; y = temp;} شرح الكود:
السطر 3: تعريف الدالة
function parameters: x,y passed by reference coz we want to change their valus
لقد قمنا بتمرير x,y بـــ reference المرجع لأننا نريد تغيير قيمهما
السطر5--<8 : تعريف المتغير temp الذى يستخدم فى تبديل قيم x,y
=======================
اخيرا كود دالتنا الرئيسية main Code 4:=cpp>=cpp>=cpp> كود: #include<iostream>using namespace std;void bubblesort(int[], int); //function prototypevoid print(int[], int); //function prototypevoid swap(int&, int&); //function prototype//main functionint main(){ const int SIZE = 10; [color= #include<iostream> using namespace std; void bubblesort(int[], int); //function prototype void print(int[], int); //function prototype void swap(int&, int&); //function prototype//main function int main() { const int SIZE = 10; //constant for sizing array int a[SIZE]= {10,7,18,15,9,4,13,11,21,3}; //defining array and its elements cout << "Before BubbleSorting: [color= #A31515; font-weight: bold;]n"; print(a,SIZE); //printing array elements before sorting bubblesort(a,SIZE); //sorting elements of the array cout << "After BubbleSorting: [color= #A31515; font-weight: bold;]n"; print(a, SIZE); //printing elements after sorting system("pause"); return 0; } شرح الكود:
السطر 4 --< 6: تعريف functions prototypes ليستخدمها المترجم فى التعرف على الدوال
السطر 11: تعريف ثابت لتحديد حجم المصفوفة
السطر 12: تعريف المصفوفة و ملئها ببعض البيانات
السطر 13 - 14: طباعة عناصر المصفوفة قبل الترتيب
السطر 15: تطبيق دالة الترتيب على عناصر المصفوفة
السطر 16-17: عرض عناصر المصفوفة بعد الترتيب
================================
الى هنا انتهى شرح الخوارزمية و تطبيقها بــكود معشوقتنا ++C
اى مشكلة او تعليق على الكود يرجى اضافتها و مناقشتها مع بقية الاعضاء
ارجو ان يكون وفقنى الله تعالى فى هذا الشرح البسيط للخورازمية
ملاحظة: الكود مرفق كاملا لمن يجد مشكلة فى الكود المكتوب فى الموضوع
وفقكم الله=cpp>=cpp>=cpp> bubble_sort.rar |