مرتب‌سازی زوج و فرد

از نظر محاسباتی، مرتب‌سازی زوج و فرد (به انگلیسی: Odd–even sort) یا مرتب‌سازی بر اساس تقدم و تاخر جز الگوریتمهای مرتب‌سازی نسبتا ساده هستند که در اصل برای استفاده در پردازنده‌های چند هسته در ارتباطات درونی (محلی) توسعه یافته‌است. این مرتب‌سازی نوعی از مرتب‌سازی نسبی است که در آن از بسیاری از ویژگی‌های مرتب‌سازی حبابی استفاده شده‌است. توابع این الگوریتم از طریق مقایسه همه جفت‌های (فرد، زوج) بررسی شده که از عناصر هم جوار هستند، عناصر را به ترتیب در جایگاه خود در زوج مرتب (اول کوچکتر و بعد بزرگتر) قرار می‌دهند. گام بعدی تکرار جفت سازی (زوج، فرد) عناصر هم جوار و بررسی آن‌ها است. این مراحل به تناوب بین زوج‌های (فرد و زوج) و (زوج و فرد) تکرار شده تا جایی که لیست به‌طور کامل مرتب شود.[۱]

مرتب‌سازی زوج و فرد
نمونهٔ مرتب کردن جابه‌جایی زوج و فرد در مرتب‌سازی یک فهرست از ارقام تصادفی.
ردهالگوریتم مرتب‌سازی
ساختمان دادهآرایه
کارایی بدترین حالت
کارایی بهترین حالت
پیچیدگی فضایی

مرتب‌سازی در آرایه‌های پردازنده ویرایش

در پردازنده‌های موازی با یک مقدار پردازش شده و ارتباطات محلی باهمسایه‌های راست و چپ، پردازنده به‌طور هم‌زمان به انجان عملیات مقایسه و تبادل آن با همسایگان خود به صورت متناوب بین جفت‌ها (فرد و زوج) و (زوج و فرد) می‌پردازد. این الگوریتم در ابتدا توسط هابرمن در سال ۱۹۷۲ ارائه شد و درپردازنده‌ها کارایی بسیاری داشت. گسترش این الگوریتم باعث کارآمدتر شدن پردازنده‌ها در عمل‌ها ترکیبی شد. به‌طور خلاصه مراحل کار این نوع الگوریتم‌ها به این صورت است که هر پردازنده در هر مرحله زیر لیست مربوط به خور را با استفاده از بهینه‌ترین الگوریتم خود را به روش تقسیم - مرتب‌سازی ادغامی یا روش تقدم و تاخر - ادغام مرتب‌سازی می‌کند و آن‌ها را با فهرست مجاورت خود مقایسه می‌کند. در هر مرحله جفت‌های (فرد و زوج) و (زوج و فرد) به صورت متناوب برای برای تشکیل جفت‌های جدید با لیست‌های هم جوار تکرار می‌شود.[۲]

روش باتچر ویرایش

یکی دیگر از روش‌های مربوط به این گونه الگوریتم‌ها که با استفاده از عملیات‌های (مقایسه – تبادل) و (ایده آل – درهم) صورت می‌گیرد روش باتچر است. روش باتچر در پردازنده‌های موازی با ارتباطات دراز مدت مؤثر و کارآمد است.[۳]

الگوریتم ویرایش

این الگوریتم در الگوریتم‌های تک پردازنده، مانند مرتب‌سازی حبابی، ساده اما کارآمد نیست. در اینجا یک شاخص مبتنی بر صفر فرض شده‌است:

       /* فرض بر این است که آرایه‌ای از عناصر مرتب شده‌اند */
var sorted = false;
while(!sorted)
{
    sorted=true;
    for(var i = 1; i <list.length-1; i += ۲)
    {
        if(a[i]> a[i+1])
        {
            swap(a, i, i+1);
            sorted = false;
      }
  }

    for(var i = 0; i <list.length-1; i += ۲)
    {
        if(a[i]> a[i+1])
        {
            swap(a, i, i+1);
            sorted = false;
      }
  }
}

پیوند به بیرون ویرایش

منابع ویرایش

  1. Phillips, Malcolm. "Array Sorting". Homepages.ihug.co.nz. Archived from the original on 28 October 2011. Retrieved 3 August 2011.
  2. N. Habermann (1972) "Parallel Neighbor Sort (or the Glory of the Induction Principle)," CMU Computer Science Report (available as Technical report AD-759 248, National Technical Information Service, US Department of Commerce, 5285 Port Royal Rd Springfield VA 22151).
  3. Lakshmivarahan, S.; Dhall, S. K. & Miller, L. L. (1984), Alt, Franz L. & Yovits, Marshall C. (eds.), "Parallel Sorting Algorithms", Advances in Computers, Academic Press, 23: 295–351, doi:10.1016/S0065-2458(08)60467-2, ISBN 978-0-12-012123-6