شرح خوارزمية الترتيب بالاختيار (Selection Sort) في بايثون 🚀
اليوم سنتعلم واحدة من أبسط خوارزميات الترتيب، وهي خوارزمية الترتيب بالاختيار. إذا كنت تريد فهم كيف يمكننا ترتيب قائمة من الأرقام من الأصغر إلى الأكبر (أو العكس) بطريقة سهلة الفهم، فأنت في المكان الصحيح! هيا نبدأ. ✨
ما هي خوارزمية الترتيب بالاختيار؟ 🤔
ببساطة شديدة، تخيل أن لديك مجموعة من الأرقام غير مرتبة على الطاولة. طريقة الترتيب بالاختيار تشبه تماماً ما يفعله الإنسان: تبحث عن أصغر عنصر في المجموعة كلها، ثم تضعه في البداية. ثم تكرر هذه العملية على باقي الأرقام غير المرتبة.
الفكرة الأساسية هي:
- ابحث عن أصغر عنصر في المصفوفة.
- ابدله مع العنصر الأول في المصفوفة.
- كرر العملية على باقي المصفوفة (بدءاً من العنصر الثاني، ثم الثالث، وهكذا).
كيف تعمل الخوارزمية خطوة بخطوة؟ 👣
لنفترض أن لدينا مصفوفة صغيرة تحتوي على الأرقام: [64, 25, 12, 22, 11]. سنرتبها تصاعدياً (من الأصغر إلى الأكبر).
المرحلة الأولى:
- ننظر إلى المصفوفة كاملة
[64, 25, 12, 22, 11]. - نجد أن أصغر عنصر هو
11. - نبدل موقع العنصر الأول (
64) مع أصغر عنصر (11). - تصبح المصفوفة:
[11, 25, 12, 22, 64]. الآن، العنصر الأول (11) في مكانه الصحيح النهائي.
المرحلة الثانية:
- ننظر إلى الجزء غير المرتب من المصفوفة، وهو
[25, 12, 22, 64](تجاهلنا العنصر الأول المرتب). - نجد أن أصغر عنصر في هذا الجزء هو
12. - نبدل موقع أول عنصر في هذا الجزء (
25) مع أصغر عنصر (12). - تصبح المصفوفة:
[11, 12, 25, 22, 64]. الآن، العنصران الأولان في مكانهما الصحيح.
المرحلة الثالثة:
- ننظر إلى الجزء غير المرتب:
[25, 22, 64]. - أصغر عنصر هو
22. - نبدل موقع
25و22. - تصبح المصفوفة:
[11, 12, 22, 25, 64].
المرحلة الرابعة:
- ننظر إلى الجزء غير المرتب:
[25, 64]. - أصغر عنصر هو
25، وهو موجود بالفعل في المكان الصحيح (أول عنصر في الجزء غير المرتب). - لا حاجة لتبديل.
- المصفوفة النهائية المرتبة هي:
[11, 12, 22, 25, 64].
كما ترى، في كل مرحلة (أو تمريرة) نحدد موقع أصغر عنصر ونجعله يشغل الموضع التالي في بداية المصفوفة المرتبة.
تنفيذ الخوارزمية بكود بايثون 🐍
الآن، لنترجم هذه الخطوات إلى كود برمجي في لغة Python. الكود سيكون بسيطاً وواضحاً.
# تعريف دالة لترتيب مصفوفة باستخدام خوارزمية الاختيار
def selection_sort(arr):
# الحصول على طول المصفوفة
n = len(arr)
# التكرار على جميع عناصر المصفوفة عدا الأخير
for i in range(n):
# نفترض أن العنصر الحالي (i) هو الأصغر
min_index = i
# البحث عن أصغر عنصر في الجزء غير المرتب (من i+1 إلى النهاية)
for j in range(i+1, n):
if arr[j] < arr[min_index]:
min_index = j # تحديث مؤشر أصغر عنصر
# تبديل موقع العنصر الأصغر الموجود مع العنصر الحالي (i)
arr[i], arr[min_index] = arr[min_index], arr[i]
# إرجاع المصفوفة المرتبة
return arr
# مثال لاختبار الدالة
my_list = [64, 25, 12, 22, 11]
print("المصفوفة الأصلية:", my_list)
sorted_list = selection_sort(my_list)
print("المصفوفة بعد الترتيب:", sorted_list)
شرح الكود:
def selection_sort(arr):: نعرف دالة اسمهاselection_sortتأخذ مصفوفة (arr) كمدخل.n = len(arr): نخزن طول المصفوفة في متغيرnلاستخدامه في الحلقات التكرارية.for i in range(n):: هذه الحلقة تمر على كل موضع في المصفوفة. الموضعiهو المكان الذي سنضع فيه أصغر عنصر في كل مرة.min_index = i: نفترض أن العنصر في الموضعiهو الأصغر حالياً.for j in range(i+1, n):: هذه الحلقة الداخلية تبحث في باقي المصفوفة (بدءاً منi+1إلى النهاية) عن عنصر أصغر من الذي عندmin_index.if arr[j] < arr[min_index]:: إذا وجدنا عنصراً أصغر، نحدثmin_indexليصبح مؤشر هذا العنصر الأصغر.arr[i], arr[min_index] = arr[min_index], arr[i]: بعد انتهاء البحث، نبدل مواقع العنصر الحاليiمع العنصر الأصغر الذي وجدناهmin_index.- أخيراً، نعيد المصفوفة المرتبة.
مميزات وعيوب خوارزمية الاختيار ⚖️
المميزات:
- البساطة: سهلة الفهم والتنفيذ.
- أداء ثابت للذاكرة: لا تحتاج إلى مصفوفة إضافية للترتيب، فهي ترتب العناصر في مكانها (In-Place).
العيوب:
- غير فعالة: بطيئة على المصفوفات الكبيرة. وقت التنفيذ يكون دائماً تقريباً
O(n²)بغض النظر عن ترتيب البيانات الأصلية (حتى لو كانت مرتبة مسبقاً).
خلاصة الدرس 📝
في هذا الدرس، تعلمنا أساسيات خوارزمية الترتيب بالاختيار، وهي خوارزمية مباشرة تعتمد على إيجاد أصغر عنصر ووضعه في موضعه الصحيح في كل مرة. قمنا بشرحها خطوة بخطوة ثم قمنا بكتابة كود بايثون بسيط لتنفيذها. تذكر أن هذه الخوارزمية رائعة للتعلم ولكنها ليست الخيار الأفضل للبيانات الكبيرة.
ماذا سنتعلم في الدرس القادم؟ 🔮
الآن بعد أن أتقنت خوارزمية الترتيب بالاختيار، حان الوقت للانتقال إلى خوارزمية أخرى بسيطة وشائعة! في الدرس القادم، سنتعرف على خوارزمية الترتيب بالإدراج (Insertion Sort). ستتعلم كيف تعمل هذه الخوارزمية التي تشبه طريقة ترتيب أوراق اللعب في يدك، وسنقارنها مع خوارزمية اليوم. استعد لمزيد من التفاصيل المشوقة!
🎓 اختبر نفسك
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال