تخطَّ إلى المحتوى

Radix Sort

الترتيب الأساسي Radix Sort

Radix Sort يرتّب الأعداد رقمًا (خانة) واحدة في كل مرة من الأقل أهمية للأكثر، باستخدام خوارزمية مستقرّة (عادة Counting Sort) كخطوة فرعية بكل مرور.

بدل الترتيب حسب القيمة كاملة كما تفعل Counting Sort، يمرّ Radix Sort على خانات العدد واحدة تلو الأخرى (آحاد، عشرات، مئات...)، ويرتّب حسب كل خانة بخوارزمية مستقرّة — الاستقرار ضروري لأن ترتيب خانة سابقة يجب أن يبقى محفوظًا عند الترتيب حسب خانة تالية.

الصياغة

place = 1
while max_num // place > 0:
    arr = counting_sort_by_digit(arr, place)
    place *= 10

📄 مثال

def radix_sort(arr):
    if not arr:
        return arr
    max_num = max(arr)
    place = 1
    while max_num // place > 0:
        arr = counting_sort_by_digit(arr, place)
        place *= 10
    return arr

def counting_sort_by_digit(arr, place):
    output = [0] * len(arr)
    counts = [0] * 10
    for num in arr:
        counts[(num // place) % 10] += 1
    for i in range(1, 10):
        counts[i] += counts[i - 1]
    for num in reversed(arr):
        digit = (num // place) % 10
        counts[digit] -= 1
        output[counts[digit]] = num
    return output

print(radix_sort([170, 45, 75, 90, 802, 24, 2, 66]))
# [2, 24, 45, 66, 75, 90, 170, 802]

أهم النقاط

النقطةالوظيفة
التعقيد الزمنيO(d × (n + k)) — d عدد الخانات، n عدد العناصر، k قاعدة العدّ (عادة 10)
مستقرّة (Stable)؟نعم، بشرط أن تكون خوارزمية الترتيب الفرعي بكل مرور مستقرّة أيضًا
الأنسب لـأعداد كبيرة لكن بعدد خانات ثابت وصغير (معرّفات، تواريخ)

💡 نصائح عملية

  • تأكّد أن خوارزمية الترتيب الفرعي بكل مرور (عادة Counting Sort) مستقرّة — هذا شرط أساسي لصحة Radix Sort ككل

⚠️ أخطاء شائعة

  • استخدام خوارزمية غير مستقرّة كخطوة فرعية بكل مرور — يكسر الترتيب الذي حقّقته المرورات على الخانات الأقل أهمية

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار DSA الكامل بالعربي.