🚀 خوارزمية Quick Sort في بايثون: دليل المبتدئين الشامل

اليوم سنتعلم واحدة من أهم وأسرع خوارزميات الفرز في عالم البرمجة - خوارزمية Quick Sort أو الفرز السريع. هذه الخوارزمية تعتمد على مفهوم "فرق تسد" وهي فعالة جداً في ترتيب البيانات.


🎯 ما هي خوارزمية Quick Sort؟

Quick Sort هي خوارزمية فرز تعتمد على مبدأ Divide and Conquer (فرق تسد). الفكرة الأساسية هي:

  • اختيار عنصر محوري (Pivot) من المصفوفة
  • تقسيم المصفوفة إلى جزئين: عناصر أصغر من المحور وعناصر أكبر من المحور
  • تطبيق الخوارزمية بشكل متكرر على كل جزء
# مثال بسيط لفكرة Quick Sort
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    # سنكمل الشرح في الأقسام التالية

🔍 كيف تعمل خوارزمية Quick Sort خطوة بخطوة؟

لنفهم آلية العمل بمثال عملي. لنفرض أن لدينا المصفوفة التالية: [64, 34, 25, 12, 22, 11, 90]

الخطوة 1: اختيار المحور (Pivot)

  • نختار عنصراً محورياً (غالباً أول أو آخر عنصر)
  • في مثالنا: نختار العنصر الأول 64 كمحور

الخطوة 2: التقسيم (Partitioning)

  • ننقل جميع العناصر الأصغر من المحور إلى يساره
  • ننقل جميع العناصر الأكبر من المحور إلى يمينه

الخطوة 3: التكرار (Recursion)

  • نطبق نفس الخطوات على الجزء الأيسر والأيمن

💻 تنفيذ Quick Sort في بايثون

لنرى الآن كيف ننفذ هذه الخوارزمية بلغة Python:

def quick_sort(arr):
    # الشرط الأساسي: إذا كانت المصفوفة تحتوي على عنصر واحد أو أقل
    if len(arr) <= 1:
        return arr
    
    # اختيار المحور (نختار العنصر الأوسط)
    pivot = arr[len(arr) // 2]
    
    # تقسيم المصفوفة إلى ثلاثة أجزاء
    left = [x for x in arr if x < pivot]      # العناصر الأصغر من المحور
    middle = [x for x in arr if x == pivot]   # العناصر المساوية للمحور
    right = [x for x in arr if x > pivot]     # العناصر الأكبر من المحور
    
    # تطبيق الخوارزمية بشكل متكرر ودمج النتائج
    return quick_sort(left) + middle + quick_sort(right)

# مثال على الاستخدام
numbers = [64, 34, 25, 12, 22, 11, 90]
sorted_numbers = quick_sort(numbers)
print("المصفوفة بعد الترتيب:", sorted_numbers)

مخرجات الكود:

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

📊 شرح مثال عملي مفصل

لنتبع تنفيذ الخوارزمية على المصفوفة [3, 6, 8, 10, 1, 2, 1]:

التكرار الأول:

  • المحور: 10 (العنصر الأوسط)
  • الأيسر: [3, 6, 8, 1, 2, 1]
  • الأوسط: [10]
  • الأيمن: []

التكرار الثاني على الأيسر:

  • المحور: 1 (العنصر الأوسط من [3, 6, 8, 1, 2, 1])
  • الأيسر: [1, 1]
  • الأوسط: [2]
  • الأيمن: [3, 6, 8]

وهكذا تستمر العملية حتى يتم فرز جميع العناصر.


⚡ مزايا وعيوب Quick Sort

المزايا:

  • ⏱️ سريعة جداً في الممارسة العملية
  • 🎯 كفاءة عالية للمصفوفات الكبيرة
  • 💾 تستهلك ذاكرة أقل من بعض الخوارزميات الأخرى

العيوب:

  • 📉 أداء ضعيف للمصفوفات المرتبة مسبقاً
  • 🔄 تعتمد على الاستدعاء الذاتي (Recursion) مما قد يسبب مشاكل للبيانات الضخمة

🎓 نصائح عملية للمبتدئين

  1. ابدأ بمصفوفات صغيرة لفهم آلية العمل
  2. جرب محاور مختلفة (أول عنصر، آخر عنصر، عنصر وسطي)
  3. استخدم print statements لمتابعة خطوات التنفيذ
  4. ارسم المصفوفة على ورقة لتتبع عملية التقسيم
# مثال مع طباعة الخطوات للمساعدة في الفهم
def quick_sort_debug(arr, depth=0):
    indent = "  " * depth
    print(f"{indent}فرز: {arr}")
    
    if len(arr) <= 1:
        return arr
    
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    print(f"{indent}المحور: {pivot}")
    print(f"{indent}يسار: {left}، وسط: {middle}، يمين: {right}")
    
    return quick_sort_debug(left, depth+1) + middle + quick_sort_debug(right, depth+1)

🏁 خلاصة الدرس

تعلمنا في هذا الدرس:

  • ✅ مفهوم خوارزمية Quick Sort ومبدأ "فرق تسد"
  • ✅ كيفية عمل الخوارزمية خطوة بخطوة
  • ✅ تنفيذ الخوارزمية بلغة Python
  • ✅ مزايا وعيوب هذه الطريقة في الفرز

Quick Sort هي خوارزمية قوية ومهمة في عالم البرمجة، وفهمها سيساعدك كثيراً في مشوارك التعليمي.


ماذا سنتعلم في الدرس القادم؟ 🎯

في الدرس القادم، سنتعلم عن خوارزمية Merge Sort (الفرز الدمجي)، وهي خوارزمية أخرى تعتمد على مبدأ "فرق تسد" ولكن بطريقة مختلفة. سنقارن بينها وبين Quick Sort ونرى متى نستخدم كل منهما. استعد لرحلة شيقة في عالم خوارزميات الفرز المتقدمة!