مرتب سازی شل (Shell Sort) – به زبان ساده

۲۰۱۴
۱۴۰۲/۰۴/۲۰
۵ دقیقه
PDF
آموزش متنی جامع
امکان دانلود نسخه PDF

«مرتب سازی شل» (Shell Sort) یکی از انواع «مرتب‌سازی درجی» (Insertion Sort) است. در مرتب‌سازی درجی، عناصر تنها یک موقعیت، رو به جلو جا به جا می‌شوند. هنگامی که یک عنصر به تعداد زیادی خانه به جلوتر جا به جا می‌شود، حرکات زیادی باید انجام شود.

مرتب سازی شل (Shell Sort) – به زبان سادهمرتب سازی شل (Shell Sort) – به زبان ساده
997696

مرتب سازی شل

ایده مرتب سازی شل آن است که امکان جا به جایی عناصر دور را فراهم کند. در مرتب سازی شل، آرایه برای مقادیر بزرگ h، به صورت h-sort مرتب‌سازی می‌شود. کاهش مقدار h تا هنگامی که ۱ شود، ادامه خواهد داشت. یک آرایه h-sorted گفته می‌شود اگر همه زیرلیست‌های h‌اُمین عنصر، مرتب‌سازی شده باشند. در ادامه، پیاده‌سازی مرتب سازی شل در زبان‌های برنامه‌نویسی گوناگون شامل «سی‌پلاس‌پلاس» (++C)، «جاوا» (Java) و «پایتون» (Python) انجام شده است. ولی ابتدا، برای درک بهتر مفهوم، یک مثال از مرتب سازی شل ارائه شده است.

آرایه اولیه به صورتی است که در تصویر مشاهده می‌کنید. بنابراین، کار از gap=n2gap=\frac{n}{2} آغاز می‌شود (در این مثال، ۲ است).

مرتب سازی شل (Shell Sort) -- به زبان ساده

۵۴ را به Temp منتقل کن.

مرتب سازی شل (Shell Sort) -- به زبان ساده

عناصر سمت چپ ۵۴، کوچک‌تر از آن هستند و بنابراین، نیازی به تغییر نیست. لذا ۵۴ را به جای خود بازگردان. اکنون باید یکی یکی عناصر سمت راست شکاف را انتخاب کرد و آن‌ها را در موقعیت مناسب قرار داد.

مرتب سازی شل (Shell Sort) -- به زبان ساده

ابتدا ۲ را به Temp ببر. ۲ را با arr[3-2]=34‎ مقایسه و به arr[gap+1 = 3]‎ جا به جا کن.

مرتب سازی شل (Shell Sort) -- به زبان ساده

اکنون، شکاف به 1(n4)1(\frac{n}{4}) کاهش پیدا می‌کند. همه عناصر را با شروع از arr[1]‎ انتخاب و آن‌ها را عناصر در فاصله شکاف، مقایسه کن.

مرتب سازی شل (Shell Sort) -- به زبان ساده

اکنون شکاف به ۰ می‌رسد. مرتب‌سازی متوقف می‌شود و حاصل، یک آرایه مرتب شده است.

مرتب سازی شل (Shell Sort) -- به زبان ساده

مرتب سازی شل در ++C

مرتب سازی شل در جاوا

مرتب سازی شل در پایتون ۳

مرتب سازی شل در #C

خروجی قطعه کد بالا در ادامه آمده است.

Array before sorting:
12 34 54 2 3
Array after sorting:
2 3 12 34 54

پیچیدگی زمانی پیاده‌سازی بالا برای مرتب سازی شل از درجه (O(n2 است. در پیاده‌سازی بالا، شکاف در هر تکرار به نیم کاهش پیدا می‌کند.

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

اگر نوشته بالا برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۱۲ نفر
آیا این مطلب برای شما مفید بود؟
اگر پرسشی درباره این مطلب دارید، آن را با ما مطرح کنید.
منابع:
GeeksforGeeks
PDF
مطالب مرتبط
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *