Sorting Algorithms (Part 1)

الفصل التاسع: خوارزميات الترتيب (Insertion, Shell, Heap)

الهدف: فهم الخوارزميات الأساسية $O(N^2)$ وكيفية تحسينها للوصول لـ $O(N \log N)$.
1

Insertion Sort (الترتيب بالإدراج)

آلية العمل

تشبه ترتيب أوراق اللعب في يدك.
نبدأ بعنصر واحد (مرتب افتراضياً)، ثم نأخذ العنصر التالي وندخله (Insert) في مكانه الصحيح بين العناصر السابقة.

for (p = 1; p < a.length; p++) {
  tmp = a[p];
  for (j = p; j > 0 && tmp < a[j-1]; j--)
    a[j] = a[j-1];
  a[j] = tmp;
}

Complexity

  • Worst Case: $O(N^2)$ (عكسي الترتيب).
  • Best Case: $O(N)$ (مرتبة مسبقاً).
  • ميزة: ممتاز للمصفوفات الصغيرة جداً.
2

Shellsort (ترتيب شيل)

الحل لمشكلة $O(N^2)$

Insertion Sort بطيء لأنه يحرك العناصر خطوة واحدة فقط في كل مرة.
Shellsort يقارن عناصر متباعدة بمسافة (Gap) كبيرة، ثم يقلل المسافة تدريجياً.

Gap Sequence (تتابع الفجوات)

أداء الخوارزمية يعتمد كلياً على اختيار الفجوات.
Shell's ($N/2, N/4...$): سيء، قد يصل لـ $O(N^2)$.
Hibbard's ($2^k - 1$): أفضل، يضمن $O(N^{3/2})$.

81 ... 35 ...

Compare gap elements first

3

Heapsort (ترتيب الكومة)

الاستراتيجية الذكية

  1. حول المصفوفة إلى Max-Heap (الأب أكبر من الأبناء).
  2. احذف أكبر عنصر (الجذر) وضعه في آخر خانة في المصفوفة (مكان العنصر المحذوف منطقياً).
  3. قلل حجم الـ Heap بواحد، وأعد الترتيب (Percolate Down).
  4. كرر حتى تنتهي العناصر.
Complexity

$O(N \log N)$

Build Heap: $O(N)$
Delete N times: $N \times O(\log N)$

ميزة: لا يحتاج ذاكرة إضافية (In-place).
🛡️ EXAM VAULT (خزنة الاختبار)
TRAP / فخ

Min-Heap vs Max-Heap for Sorting

لترتيب المصفوفة تصاعدياً (Ascending)، هل نستخدم Min-Heap أم Max-Heap؟
الجواب: Max-Heap.
السبب: نحتاج لسحب أكبر عنصر ووضعه في نهاية المصفوفة الفارغة تدريجياً.

COMPARISON / مقارنة

Insertion Sort Efficiency

Insertion Sort هو الأفضل في حالة واحدة: عندما تكون البيانات شبه مرتبة (Almost Sorted). في هذه الحالة يقترب أداؤه من $O(N)$.

→ السابق (Ch 8) الفصل التالي (Ch 10) ←