الگوریتم مرتب سازی ادغامی (Merge Sort)

  • شنبه ۱۱ آبان ۱۳۹۸
  • بازدید ۱۰,۳۰۹ نفر

تصویر merge-sort-algorithm_7328 الگوریتم مرتب سازی ادغامی (Merge Sort)

الگوریتم مرتب سازی ادغامی (Merge Sort)

الگوریتم مرتب سازی ادغامی (Merge Sort) مانند الگوریتم QuickSort، به روش تقسیم و غلبه (Divide and Conquer) عمل می کند. در این الگوریتم آرایه داده شده به بخش های کوچک تر تقسیم می شود و هر بخش مرتب شده و بخش بعدی ادغام می شود تا در نهایت کل آرایه مرتب شد.

تابع merge برای ادغام دو بخش از آرایه مورد استفاده قرار می گیرد. merge(arr, l, m, r)  فرآیند کلیدی است که فرض می کند arr[l..m]  و arr[m+1..r] به صورت مرتب شده هستند و دو زیر آرایه مرتب شده را با هم ادغام می کند.

تصویر زیر کل فرآیند مرتب سازی یک آرایه توسط الگوریتم مرتب سازی ادغامی را نشان می دهد. اگر به تصویر زیر نگاه کنید متوجه خواهید شد که تقسیم آرایه به زیر آرایه تا زمانی که تعداد عناصر به 1 نرسیده، ادامه می یابد. زمانی که به 1 رسید، فرآیند ادغام کردن بلوک های مختلف شروع می شود و تا ادغام کل آرایه ادامه می یابد.

تصویر merge-sort-algorithm_7328_1 الگوریتم مرتب سازی ادغامی (Merge Sort)

پیاده سازی الگوریتم Merge Sort با استفاده از زبان برنامه نویسی C:

امتحان کنید

خروحی:

تغییر به حالت نزولی

برای تغییر به حالت نزولی کافیست در تابع merge شرط موجود در حلقه while را از  if (L[i] <= R[j]) به if (L[i] >= R[j]) تغییر دهید.

نکات

  • پیچیدگی زمانی در هر سه حالت (بدترین، متوسط، بهترین) برابر است تصویر merge-sort-algorithm_7328_2 الگوریتم مرتب سازی ادغامی (Merge Sort)
  • فضای اضافه برابر است با O(n).
  • این الگوریتم برای مرتب سازی لینک لیست ها با زمان O(nlogn) مناسب است.
ثبت نظر
ریفریش کنید!
نظرات کاربران (۳ مورد)
  1. تصویر آواتار کاربر 0
    ابراهیمی چهارشنبه , 26 خرداد

    سلام، وقت بخیر. ببخشید امکانش هست که برنامه ی مرتب سازی ادغامی رو بدون استفاده از توابع و کلاس ها در زبان c++ بذارید؟ ممنون

    • تصویر آواتار کاربر 124
      AmRoچهارشنبه , 26 خرداد

      سلام..تا جایی که من بلدم نمیشه همچین کاری کرد...باید از توابع استفاده بشه

      • تصویر آواتار کاربر 0
        ابراهیمیچهارشنبه , 26 خرداد

        ممنون که جواب دادین. من از استادمون پرسیدم گفتن میشه.