Advanced Sorting

الفصل العاشر: خوارزميات الترتيب المتقدمة (Divide & Conquer)

الهدف: كسر حاجز $O(N^2)$ والتعامل مع البيانات الضخمة (External Sorting).
1

Mergesort (ترتيب الدمج)

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

تعتمد على مبدأ "فرق تسد".
1. اقسم المصفوفة إلى نصفين.
2. رتب كل نصف (بشكل عودي Recursive).
3. ادمج (Merge) النصفين المرتبين في مصفوفة واحدة.

التحليل:
  • الوقت: $O(N \log N)$ في جميع الحالات (الأفضل والأسوأ).
  • المساحة: $O(N)$ (يحتاج مصفوفة إضافية للدمج). وهذا هو عيبه الوحيد.
[38, 27, 43, 3]
[38, 27]
[43, 3]
[38][27] [43][3]
[27, 38]
[3, 43]
[3, 27, 38, 43]

Merge Step

2

Quicksort (الترتيب السريع)

الأسرع عملياً (Practically Fastest)

أيضاً "فرق تسد"، لكن التقسيم هنا ليس بالنصف، بل بناءً على قيمة محددة تسمى المحور (Pivot).

1. Pick Pivot: اختر عنصراً (مثلاً الوسيط Median).
2. Partition: أعد ترتيب المصفوفة بحيث:
- العناصر الأصغر من Pivot تذهب لليسار.
- العناصر الأكبر تذهب لليمين.
3. Recurse: رتب الجزء الأيسر والأيمن بنفس الطريقة.
مشكلة اختيار الـ Pivot:
  • إذا اخترت أول عنصر وكان المصفوفة مرتبة، يصبح الأداء $O(N^2)$ (كارثة!).
  • أفضل استراتيجية: Median-of-Three (اختر الأول، الأخير، والوسط، وخذ وسيطهم) .
3

External Sorting (ترتيب الملفات)

المشكلة

ماذا لو كانت البيانات أكبر من الذاكرة (RAM)؟ (مثلاً 10GB بيانات في 2GB رام).
لا يمكننا استخدام Quicksort لأنه يتطلب وصولاً عشوائياً (Random Access)، والقرص بطيء جداً في ذلك.

الحل: K-Way Merge Sort

  1. اقرأ جزءاً بحجم الذاكرة (Chunk).
  2. رتبه في الذاكرة واحفظه كملف مؤقت (Run).
  3. كرر حتى تنتهي البيانات.
  4. ادمج الملفات المؤقتة معاً (Merge Pass).
📼

Tape Drives Logic

نستخدم أشرطة (أو ملفات) لأننا نقرأها بالتسلسل (Sequentially) فقط، وهو ما يبرع فيه الـ Merge Sort.

🛡️ EXAM VAULT (خزنة الاختبار)
TRAP / فخ شائع

Quicksort Complexity

Average: $O(N \log N)$.
Worst Case: $O(N^2)$ (يحدث إذا كان الـ Pivot سيئاً جداً، مثل اختيار أصغر عنصر دائماً).
على عكس Mergesort الذي يضمن $O(N \log N)$ دائماً.

COMPARISON / مقارنة المساحة

Memory Usage

Mergesort: $O(N)$ (يحتاج مصفوفة إضافية).
Quicksort: $O(\log N)$ (للمكدس في الاستدعاء العودي).
Heapsort: $O(1)$ (In-place).
لذلك Quicksort هو المفضل في الذاكرة (In-place تقريباً) وأسرع بسبب الكاش.

→ السابق (Ch 9) الفصل التالي (Ch 11) ←