الگوریتم مرتبسازی ادغامی یکی از الگوریتمهای معروف مرتبسازی است که برای مرتبسازی دادهها از آن استفاده میشود. این الگوریتم بر مبنای تقسیم و حکم فراتر رفته (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 برای اجرای الگوریتم مرتبسازی ادغامی در مثال بالا:
این کد Python از تقسیم و حکم استفاده میکند تا لیست اعداد را مرتب کند. سپس مراحل تقسیم و حکم را به صورت بازگشتی انجام میدهد و در نهایت لیست مرتبشده را چاپ میکند.
الگوریتم مرتبسازی ادغامی به عنوان یکی از الگوریتمهای مرتبسازی مقایسهای به شمار میآید و در بدترین حالت نیز با پیچیدگی زمانی O(n log n) عمل میکند. این الگوریتم به خوبی برای مرتبسازی لیستهای بزرگ و همچنین برای مرتبسازی پایدار مناسب است.
دیدگاهها