مرتب‌سازی درجی (Insertion Sort)

مرتب‌سازی درجی: مثل مرتب‌کردن ورق در دست؛ عالی برای داده تقریباً مرتب و پایه الگوریتم TimSort پایتون

مرتب‌سازی درجی چیست؟

Insertion Sort مثل مرتب‌کردن ورق‌های بازی در دست: هر کارت جدید را بردارید و در جای درستش بین کارت‌های مرتب قبلی درج کنید.

الگوریتم

  1. عنصر اول خودش مرتب است (زیرلیست با طول ۱)
  2. عنصر بعدی (کلید) را بردار
  3. عناصر مرتب قبلی که از کلید بزرگ‌ترند را یک خانه به راست بکش
  4. کلید را در جای خالی‌شده بگذار
  5. تکرار تا آخر لیست

مثال گام‌به‌گام

[12, 11, 13, 5, 6]

کلید=11: 12>11، بکش -> [11, 12 | 13, 5, 6]
کلید=13: 12<13، اوکی -> [11, 12, 13 | 5, 6]
کلید=5:  همه بکش    -> [5, 11, 12, 13 | 6]
کلید=6:  13,12,11 بکش -> [5, 6, 11, 12, 13]  ✓

پیچیدگی

حالتپیچیدگیتوضیح
بدترین (معکوس)O(n²)هر کلید تا اول می‌رود
میانگینO(n²)—
بهترین (مرتب)O(n) ✓هر کلید فقط یک مقایسه
تقریباً مرتب≈ O(n) ✓✓قهرمان این حالت!

قهرمان داده تقریباً مرتب

اگر هر عنصر فقط چند خانه از جای درستش دور باشد، Insertion Sort تقریباً خطی عمل می‌کند! به همین دلیل:

مزایا و معایب

نکته: اگر داده‌تان «تقریباً مرتب» است (مثلاً لیست کاربران که فقط چند تای جدید جابه‌جا شده)، Insertion Sort می‌تواند از Quick Sort هم سریع‌تر باشد!

جمع‌بندی

این مبحث بخشی از دوره آموزش کامل ساختار داده و الگوریتم است.

ابزارهای مرتبط