پروژه برنامه نویسی Selection Sort ( مرتب سازی انتخابی ) به زبان سی پلاس پلاس
پروژه برنامه نویسی Selection Sort ( مرتب سازی انتخابی ) به زبان سی پلاس پلاس
سورس کد پروژه برنامه نویسی Selection Sort ( مرتب سازی انتخابی ) به زبان سی پلاس پلاس در محیط کنسول
پروژه ی دانشجویی درس برنامه نویسی نرم افزار در مقطع کارشناسی رشته ی مهندسی کامپیوتر و مهندسی فناوری اطلاعات ( IT )
پروژه برنامه نویسی Selection Sort ( مرتب سازی انتخابی ) به زبان سی پلاس پلاس
شرح پروژه:
برنامه ای به زبان سی پلاس پلاس و در محیط کنسول بنویسید که آرایه ای از اعداد را با استفاده از روش مرتب سازی انتخابی مرتب کند. خروجی برنامه باید شامل اعضای آرایه قبل و بعد از مرتب سازی باشد.
پروژه برنامه نویسی Selection Sort ( مرتب سازی انتخابی ) به زبان سی پلاس پلاس
معرفی مرتب سازی انتخابی:
مرتبسازی انتخابی یکی از انواع الگوریتم مرتبسازی میباشد که جزو دستهٔ الگوریتمهای مرتبسازی مبتنی بر مقایسهاست. این الگوریتم دارای پیچیدگی زمانی از درجهٔ O(n2) است که به همین دلیل اعمال آن روی مجموعهٔ بزرگی از اعداد کارا به نظر نمیرسدو بهطور عمومی ضعیفتر از نوع مشابهش که مرتبساز درجی است عمل میکند. این مرتبسازی به دلیل سادگی اش قابل توجهاست. کارایی آن برحسب تعداد ورودیها در نمودار زیر نشان داده شدهاست.
مرتبسازی انتخابی
نحوه عملکرد
این الگوریتم اینگونه عمل میکند: ابتدا کوچکترین عنصر مجموعه اعداد را یافته با اولین عدد جابجا میکنیم. سپس دومین عنصر کوچکتر را یافته با دومین عدد جابجا میکنیم و این روند را برای n-1 عدد اول تکرار میکنیم. در حقیقت در هر مرحله ما لیست خود را به دو بخش تقسیم میکنیم. زیرلیست اول که قبلاً مرتب کردهایم و سایر اعضای لیست که هنوز مرتب نشدهاست. در جدول زیر مثالی از پیادهسازی این روال بر روی ۶ عدد آمدهاست.
تحلیل مرتبه الگوریتم
تحلیل الگوریتم مرتبسازی انتخابی برخلاف بسیاری از مرتبسازیهای دیگر بسیار سادهاست. زیرا که هیچکدام از حلقههای آن به اعداد موجود در لیست ورودی بستگی ندارد. در مرحلهٔ اول به دست آوردن کمینه در لیست n عنصری نیاز به پیمودن کل n عدد و n – ۱ مقایسه دارد و سپس باید کمینهٔ بدست آمده با اولین عدد جابجا شود. در مرحلهٔ بعدی به دست آوردن دومین کمینه در لیست ۱ – n عنصری نیاز به پیمودن کل ۱ – n عدد و ۲ – n مقایسه دارد و کمینهٔ بدست آمده بادومین عدد جابجا شودو این روند ادامه پیدا میکند. پس کلاً تعداد مقایسهها عبارتست از:
(n − ۱) + (n − ۲) +… + ۲ + ۱ = n(n − ۱) / ۲ ∈ Θ(n2)
مرتبهٔ این الگوریتم به دلیل عدم وابستگی آن به نحوهٔ ترتیب اعداد در بهترین، بدترین و حالت متوسط یکسان و برابر(Θ(n2 است.
ویژگیهای مرتبسازی انتخابی
۱-با توجه به قطعه کد نوشته شده، ترتیب عناصر تغییری در عملکرد آن اینجا نمیکند. یعنی این الگوریتم برای دادههای کاملاً مرتب، نامرتب تصادفی و مرتب معکوس به یک ترتیب عمل کرده و تمام مقایسههای محاسبه شده در رابطه فوق را انجام میدهد؛ بنابراین پیچیدگی این الگوریتم در بهترین حالت و حالت متوسط نیز (Θ(n2 است. ۲- مرتبسازی انتخابی یک روش مرتبسازی درجا است. یعنی عملیات مرتبسازی در داخل خود لیست و بدون نیاز به حافظه کمکی بزرگ انجام میگیرد. ۳- در پیادهسازی مرتبسازی انتخابی به روش فوق، اگر دو عنصر با مقدار بیشینه داشته باشیم، اولی انتخاب شده و به انتهای لیست منتقل میشود. در نتیجه ترتیب آنها به هم میخورد؛ بنابراین این پیادهسازی روش پایدار نیست. در روش پایدار ترتیب عناصر با مقدار یکسان تغییر نمیکند. اما اگر در مقایسه عناصر آرایه به جای> از => استفاده کنید، مرتبسازی پایدار خواهد شد.
مقایسه با سایر الگوریتمهای مرتبسازی
این الگوریتم بین الگوریتمهای با مرتبهٔ مرتبساز انتخابی از مرتبساز حبابی و مرتبساز گورزاد (در حالت متوسط) بهتر عمل میکند. اما عموماً ضعیفتر ازمرتبساز درجی است. یکی از شباهتهای مرتبساز درجی به مرتبساز انتخابی این است که در هر دو پس از پیمایش Kام مجموعه اعداد kعنصر اول در جای صحیح خود قرار گرفتهاند. فایدهٔ مرتبساز درجی این است که برای پیدا کردن عنصر x هر تعداد از اعداد را که نیاز است بررسی میکند. حال آنکه مرتب ساز انتخابی همه عناصر باقیمانده را بررسی میکند. به هر حال هر دو آنها روی لیستهای کوچک بسیار سریع هستند. در نهایت اعمال مرتبساز انتخابی روی لیستهایی با اندازه بزرگ به مراتب از مرتبساز حبابی که روی ان لیستها با پیچیدگی زمانی (Θ(n log n عمل میکند ضعیفتر است.