الگوریتم مرتبسازی ادغامی یکی از الگوریتمهای معروف مرتبسازی است که برای مرتبسازی دادهها از آن استفاده میشود. این الگوریتم بر مبنای تقسیم و حکم فراتر رفته (Divide and Conquer) عمل میکند و دادهها را به دو قسمت تقسیم میکند، هر دو را به طور مستقل مرتب میسازد و سپس نتایج را ترکیب میکند. این الگوریتم به خصوص در مواقعی کارآمد است که لیستها بزرگ و نیاز به مرتبسازی پایدار دارند.
فرض کنید که میخواهیم یک لیست از اعداد را به صورت نزولی مرتب کنیم. مراحل اجرای الگوریتم مرتبسازی ادغامی به صورت زیر است:
- تقسیم: لیست را به دو نیمه تقسیم میکنیم.
 - حکم: هر یک از دو نیمه را به صورت مستقل مرتب میکنیم. این مرتبسازی را با فراخوانی بازگشتی بهکار میبریم.
 - ترکیب: دو نیمه مرتبشده را با یکدیگر ترکیب میکنیم تا لیست نهایی مرتب شود.
 
بیایید یک مثال ساده را مشاهده کنیم:
لیست ورودی: [38, 27, 43, 3, 9, 82, 10]
- مرحله تقسیم:
- نیمه اول: [38, 27, 43]
 - نیمه دوم: [3, 9, 82, 10]
 
 - مرحله حکم:
- نیمه اول:
- تقسیم: [38], [27, 43]
 - حکم: [27, 43] به صورت [27, 43] مرتب میشود.
 - ترکیب: [27, 43, 38] (لیست اصلی نیز مرتب شده است)
 
 - نیمه دوم:
- تقسیم: [3, 9], [82, 10]
 - حکم: [3, 9] به صورت [3, 9] مرتب میشود.
 - حکم: [10, 82] به صورت [10, 82] مرتب میشود.
 - ترکیب: [3, 9, 10, 82] (لیست اصلی نیز مرتب شده است)
 
 
 - نیمه اول:
 - مرحله ترکیب:
- لیستهای مرتبشده [27, 38, 43] و [3, 9, 10, 82] را با یکدیگر ترکیب میکنیم.
 - نهایتاً لیست مرتبشده [3, 9, 10, 27, 38, 43, 82] حاصل میشود.
کد Python برای اجرای الگوریتم مرتبسازی ادغامی در مثال بالا: 
 
def merge_sort(arr):
    if len(arr) > 1:
        # مرحله تقسیم: تقسیم لیست به دو نیمه
        mid = len(arr) // 2
        left_half = arr[:mid]
        right_half = arr[mid:]
        # مرتبسازی دو نیمه به صورت مستقل (حکم)
        merge_sort(left_half)
        merge_sort(right_half)
        i = j = k = 0
        # مرحله ترکیب: ترکیب دو نیمه مرتبشده
        while i < len(left_half) and j < len(right_half):
            if left_half[i] < right_half[j]:
                arr[k] = left_half[i]
                i += 1
            else:
                arr[k] = right_half[j]
                j += 1
            k += 1
        while i < len(left_half):
            arr[k] = left_half[i]
            i += 1
            k += 1
        while j < len(right_half):
            arr[k] = right_half[j]
            j += 1
            k += 1
# مثال استفاده:
arr = [38, 27, 43, 3, 9, 82, 10]
merge_sort(arr)
print("لیست مرتبشده:", arr)
این کد Python از تقسیم و حکم استفاده میکند تا لیست اعداد را مرتب کند. سپس مراحل تقسیم و حکم را به صورت بازگشتی انجام میدهد و در نهایت لیست مرتبشده را چاپ میکند.
الگوریتم مرتبسازی ادغامی به عنوان یکی از الگوریتمهای مرتبسازی مقایسهای به شمار میآید و در بدترین حالت نیز با پیچیدگی زمانی O(n log n) عمل میکند. این الگوریتم به خوبی برای مرتبسازی لیستهای بزرگ و همچنین برای مرتبسازی پایدار مناسب است.
دیدگاهها