22. فرز الدمج (Merge Sort): التطبيق وخطوة الدمج (الجزء 2)
يكمن جوهر كفاءة Merge Sort في دالة merge، التي تأخذ قائمتين فرعيتين مفرزتين وتدمجهما في قائمة واحدة مفرزة في زمن قدره O(N).
دالة الدمج (The Merge Function)
تخيل دمج مجموعتين من أوراق اللعب، كلاهما مفرز بالفعل. ما عليك سوى النظر إلى الورقة العلوية لكل مجموعة واختيار الأصغر لإضافتها إلى المجموعة النهائية.
- استخدم مؤشرين، أحدهما لبداية القائمة الفرعية اليسرى (
L) والآخر لبداية القائمة الفرعية اليمنى (R). - طالما أن كلتا القائمتين الفرعيتين تحتويان على عناصر، قارن بين العناصر المشار إليها.
- انسخ العنصر الأصغر إلى المصفوفة النهائية وقدم مؤشره.
- بمجرد استنفاد إحدى القوائم الفرعية، انسخ جميع العناصر المتبقية من القائمة الفرعية الأخرى.
تحليل الكفاءة
- التعقيد الزمني: O(N log N) لأسوأ حالة ومتوسطها وأفضلها.
- يأتي
log Nمن مرحلة 'التقسيم' (كم مرة نقسم القائمة إلى النصف). - يأتي
Nمن مرحلة 'الدمج' (ننظر إلى كل عنصر مرة واحدة خلال كل مستوى دمج).
- يأتي
- التعقيد المكاني: مساحة مساعدة O(N)، حيث تتطلب مصفوفة مؤقتة لأداء عملية الدمج.