مرتب‌سازی انتخابی

مرتب‌سازی انتخابی
تجسم مرتب‌سازی انتخابی
تجسم مرتب‌سازی انتخابی
رده الگوریتم مرتب‌سازی
ساختمان داده آرایه
کارایی بدترین حالت O ( n 2 ) {\displaystyle O(n^{2})}
کارایی بهترین حالت O ( n 2 ) {\displaystyle O(n^{2})}
کارایی متوسط O ( n 2 ) {\displaystyle O(n^{2})}
پیچیدگی فضایی O ( n ) {\displaystyle O(n)} مجموع، O ( 1 ) {\displaystyle O(1)} کمکی
شکل (۱)
نحوهٔ عملکردمرتب‌سازی انتخابی

مرتب‌سازی انتخابی یکی از انواع الگوریتم مرتب‌سازی می‌باشد که جزو دستهٔ الگوریتم‌های مرتب‌سازی مبتنی بر مقایسه‌است. این الگوریتم دارای پیچیدگی زمانی از درجهٔ O(n2) است که به همین دلیل اعمال آن روی مجموعهٔ بزرگی از اعداد کارا به نظر نمی‌رسدو به‌طور عمومی ضعیفتر از نوع مشابهش که مرتب‌ساز درجی است عمل می‌کند. این مرتب‌سازی به دلیل سادگی اش قابل توجه‌است. کارایی آن برحسب تعداد ورودی‌ها در نمودار زیر نشان داده شده‌است. شکل (۳) نمودار زمانی بر حسب تعداد ورودی

نحوه عملکرد

این الگوریتم این‌گونه عمل می‌کند: ابتدا کوچکترین عنصر مجموعه اعداد را یافته با اولین عدد جابجا می‌کنیم. سپس دومین عنصر کوچکتر را یافته با دومین عدد جابجا می‌کنیم و این روند را برای n-1 عدد اول تکرار می‌کنیم. در حقیقت در هر مرحله ما لیست خود را به دو بخش تقسیم می‌کنیم. زیرلیست اول که قبلاً مرتب کرده‌ایم و سایر اعضای لیست که هنوز مرتب نشده‌است. در جدول زیر مثالی از پیاده‌سازی این روال بر روی ۶ عدد آمده‌است.

الگوریتم در پایتون

الگوریتم در جاوا

الگوریتم درC++

تحلیل مرتبه الگوریتم

تحلیل الگوریتم مرتب‌سازی انتخابی برخلاف بسیاری از مرتب‌سازی‌های دیگر بسیار ساده‌است. زیرا که هیچ‌کدام از حلقه‌های آن به اعداد موجود در لیست ورودی بستگی ندارد. در مرحلهٔ اول به دست آوردن کمینه در لیست n عنصری نیاز به پیمودن کل n عدد و n – 1 مقایسه دارد و سپس باید کمینهٔ بدست آمده با اولین عدد جابجا شود. در مرحلهٔ بعدی به دست آوردن دومین کمینه در لیست 1 - n عنصری نیاز به پیمودن کل 1 - n عدد و 2 - n مقایسه دارد و کمینهٔ بدست آمده بادومین عدد جابجا شودو این روند ادامه پیدا می‌کند. پس کلاً تعداد مقایسه‌ها عبارتست از:

مرتبهٔ این الگوریتم به دلیل عدم وابستگی آن به نحوهٔ ترتیب اعداد در بهترین، بدترین و حالت متوسط یکسان و برابر(Θ(n2

است.

ویژگی‌های مرتب‌سازی انتخابی

۱-با توجه به قطعه کد نوشته شده، ترتیب عناصر تغییری در عملکرد آن اینجا نمی‌کند. یعنی این الگوریتم برای داده‌های کاملاً مرتب، نامرتب تصادفی و مرتب معکوس به یک ترتیب عمل کرده و تمام مقایسه‌های محاسبه شده در رابطه فوق را انجام می‌دهد؛ بنابراین پیچیدگی این الگوریتم در بهترین حالت و حالت متوسط نیز (Θ(n2 است.

۲- مرتب‌سازی انتخابی یک روش مرتب‌سازی درجا است. یعنی عملیات مرتب‌سازی در داخل خود لیست و بدون نیاز به حافظه کمکی بزرگ انجام می‌گیرد.

۳- در پیاده‌سازی مرتب‌سازی انتخابی به روش فوق، اگر دو عنصر با مقدار بیشینه داشته باشیم، اولی انتخاب شده و به انتهای لیست منتقل می‌شود. در نتیجه ترتیب آن‌ها به هم می‌خورد؛ بنابراین این پیاده‌سازی روش پایدار نیست. در روش پایدار ترتیب عناصر با مقدار یکسان تغییر نمی‌کند. اما اگر در مقایسه عناصر آرایه به جای> از => استفاده کنید، مرتب‌سازی پایدار خواهد شد.

مقایسه با سایر الگوریتمهای مرتب‌سازی

این الگوریتم بین الگوریتم‌های با مرتبهٔ مرتب‌ساز انتخابی از مرتب‌ساز حبابی و مرتب‌ساز گورزاد (در حالت متوسط) بهتر عمل می‌کند. اما عموماً ضعیفتر ازمرتب‌ساز درجی است. یکی از شباهتهای مرتب‌ساز درجی به مرتب‌ساز انتخابی این است که در هر دو پس از پیمایش Kام مجموعه اعداد kعنصر اول در جای صحیح خود قرار گرفته‌اند. فایدهٔ مرتب‌ساز درجی این است که برای پیدا کردن عنصر x هر تعداد از اعداد را که نیاز است بررسی می‌کند. حال آنکه مرتب ساز انتخابی همه عناصر باقی‌مانده را بررسی می‌کند. به هر حال هر دو آن‌ها روی لیستهای کوچک بسیار سریع هستند. در نهایت اعمال مرتب‌ساز انتخابی روی لیستهایی با اندازه بزرگ به مراتب از مرتب‌ساز حبابی که روی ان لیستها با پیچیدگی زمانی (Θ(n log n عمل می‌کند ضعیف‌تر است.

مثال

این سورس یک عدد گرفته و به تعداد همان عدد از ورودی دریافت می‌کند و آن‌ها را با روش. Selection sort مرتب می‌کند.

  • کتاب مقدمه‌ای بر الگوریتمها(CLRS)

Copyright