«مرتب سازی درجی» (Insertion Sort) یک الگوریتم مرتبسازی ساده است که روش عملکرد آن مشابه روشی است که افراد کارتهای بازی را در دست خود مرتب میکنند. در این مطلب، به الگوریتم مرتب سازی درجی پرداخته شده و سپس، پیادهسازی آن در زبانهای برنامهنویسی گوناگون، شامل «سیپلاسپلاس» (++C ،(C، «جاوا» (Java)، «پایتون» (Python)، «سیشارپ» (#C) و «پیاچپی» (PHP) انجام شده است.
//مرتبسازی آرایه []arr با سایز n
12, 11, 13, 5, 6
از i = 1 (دومین عنصر از آرایه) تا 4 (آخرین عنصر از آرایه) حلقه بزن.
i = 1. به دلیل آنکه 11 از 12 کوچکتر است، 12 را جا به جا کن و 11 را پیش از 12 درج کن.
i = 2. عدد 13 در جای خود باقی میماند، زیرا همه عناصر [A[0..I-1 کوچکتر از 13 هستند.
11, 12, 13, 5, 6
i = 3. عدد ۵ به آغاز منتقل میشود و همه عناصر دیگر، از 11 تا 13 یک خانه از خانه کنونی خود رو به جلو، جا به جا میشوند.
5, 11, 12, 13, 6
i = 4. عدد ۶ به خانه پس از ۵ منتقل میشود و عناصر از 11 تا 13 به اندازه یک خانه از خانه کنونیشان، به جلو میروند.
5, 6, 11, 12, 13
خروجی قطعه کدهای بالا، برای آرایه [6, 5, 13, 11, 12] به صورت زیر است.
5 6 11 12 13
پیچیدگی زمانی: (O(n*2
فضای کمکی: (O(1
موارد مرزی (Boundary Cases): مرتب سازی درجی، در صورتی که عناصر دارای ترتیب برعکس باشند، بیشترین زمان اجرا را میبرد. همچنین، در صورتی که عناصر مرتب شده باشند، کمترین زمان اجرا (از درجه n) را خواهد داشت.
مرتبسازی درجا: بله
پایدار: بله
آنلاین: بله
کاربردها: مرتبسازی درجی، هنگامی مورد استفاده قرار میگیرد که تعداد عناصر کم باشد. همچنین، هنگامی که آرایه ورودی تقریبا مرتب شده باشد و تنها چند عنصر در یک آرایه بزرگ در جای نادرست قرار داشته باشند، مرتب سازی درجی گزینه مناسبی خواهد بود.
هنگامی که از جستجوی دودویی برای کاهش تعداد مقایسهها در مرتب سازی درجی استفاده میشود، به آن مرتب سازی درجی دودویی گفته میشود. مرتب سازی درجی دودویی از جستجوی دودویی به منظور پیدا کردن موقعیت مناسب برای درج عناصر انتخاب شده در هر تکرار استفاده میشود. در درج نرمال، مرتبسازی در بدترین حالت (O(i به طور میانجامد (در iاُمین تکرار). این مقدار را میتوان با استفاده از جستجوی دودویی به (O(logi کاهش داد. به طور کلی، الگوریتم همچنان دارای زمان اجرای (O(n2 است، زیرا مجموعهای از جا به جاییها برای هر درج مورد نیاز است.
در ادامه، پیادهسازی سادهای از مرتب سازی درجی برای لیستهای پیوندی ارائه شده است.
منبع: فرادرس