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

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
مرتب‌سازی زوج و فرد
Odd even sort animation.gif
نمونهٔ مرتب کردن جابه‌جایی زوج و فرد در مرتب‌سازی یک فهرست از ارقام تصادفی.
کلاس الگوریتم مرتب‌سازی
ساختمان داده‌ها آرایه
عملکرد بدترین حالت O(n^2)
عملکرد بهترین حالت O(n)
پیچیدگی فضایی بدترین حالت O(1)

از نظر محاسباتی، مرتب‌سازی زوج و فرد (به انگلیسی: 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;
      }
  }
}

منابع[ویرایش]

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