WEEK 1 • خوارزميات الترتيب

Selection Sort

ترتيب الاختيار

الفكرة الأساسية

Understanding Selection Sort

🎯 إزاي Selection Sort بيشتغل؟

📖 تشبيه الورق

تخيل عندك ورق كوتشينة مبعثر وعايز ترتبه:

  1. بتدور على أصغر ورقة في كل الورق
  2. بتحطها في أول مكان
  3. بتكرر: دور على الأصغر في الباقي، حطه في المكان التاني... وهكذا

📝 الخطوات بالتفصيل

1
ابدأ من أول عنصر (index 0)

افترض إنه أصغر عنصر مبدئياً

2
قارن مع كل العناصر الباقية

لو لقيت عنصر أصغر، احفظ الـ index بتاعه

3
بدّل (Swap)

حط الأصغر في مكانه الصح (أول مكان غير مترتب)

4
كرر للعنصر التالي

الآن الجزء الأول مترتب، كرر للباقي

⚠️ التعقيد

O(n²)

Time - بطيء للقوائم الكبيرة

لأن فيه loop جوه loop

O(1)

Space - مش محتاج ذاكرة إضافية

بنرتب in-place

مثال خطوة بخطوة

مثال: ترتيب المصفوفة [64, 25, 12, 22, 11]

Pass 1 دور على أصغر عنصر في كل الـ array
64
i=0
25
12
22
11
min!

← Swap 64 مع 11 →

11
25
12
22
64
Pass 2 دور على أصغر عنصر من index 1
11
Done
25
i=1
12
min!
22
64

← Swap 25 مع 12 →

11
12
25
22
64
Final ✓ بعد كل الـ passes
11
12
22
25
64

🎉 المصفوفة مترتبة!

INTERACTIVE

Try It Yourself!

Current (i)
Min Found
Sorted

Click "Sort" to begin.

Logs here.

Implementation

selectionSort.js
function selectionSort(arr) {
  const n = arr.length;
  
  for (let i = 0; i < n - 1; i++) {
    // Find minimum in unsorted part
    let minIdx = i;
    
    for (let j = i + 1; j < n; j++) {
      if (arr[j] < arr[minIdx]) {
        minIdx = j;
      }
    }
    
    // Swap if min is not current
    if (minIdx !== i) {
      [arr[i], arr[minIdx]] = [arr[minIdx], arr[i]];
    }
  }
  
  return arr;
}

شرح كل سطر 📖

سطر 4: نبدأ من أول عنصر، ونكرر لكل عنصر (ماعدا الأخير)
سطر 6: نفترض إن العنصر الحالي (i) هو الأصغر
سطر 8-12: ندور في باقي الـ array عن عنصر أصغر
سطر 15-17: لو لقينا عنصر أصغر، نبدّله مع العنصر الحالي