مرتب‌سازی سریع (Quick Sort)

مرتب‌سازی سریع: انتخاب pivot، پارتیشن، میانگین O(n log n) با حافظه کم؛ محبوب‌ترین الگوریتم عملی

مرتب‌سازی سریع چیست؟

Quick Sort محبوب‌ترین الگوریتم مرتب‌سازی عملی؛ مبتنی بر تقسیم و حل اما با ایده متفاوت: انتخاب یک پیوت (Pivot) و پارتیشن‌بندی لیست حول آن.

الگوریتم

  1. یک عنصر را به‌عنوان پیوت انتخاب کن
  2. پارتیشن: کوچک‌ترها به چپ پیوت، بزرگ‌ترها به راست
  3. پیوت حالا در جای نهایی است!
  4. بازگشتی روی دو بخش چپ و راست

پارتیشن Lomuto — شهود

پیوت = آخرین عنصر. اشاره‌گر i مرز «کوچک‌ترها» را نگه می‌دارد؛ هر عنصر کوچک‌تر از پیوت، به بخش چپ می‌رود. در پایان، پیوت با موقعیت i+1 جابه‌جا می‌شود.

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

[10, 80, 30, 90, 40, 50, 70]  پیوت=70

پارتیشن: [10, 30, 40, 50] 70 [80, 90]
                    ↑ جای نهایی پیوت!

بازگشت روی چپ:  [10, 30, 40, 50]
بازگشت روی راست: [80, 90]
نتیجه: [10, 30, 40, 50, 70, 80, 90]  ✓

پیچیدگی

حالتپیچیدگیسناریو
بهترین/میانگینO(n log n) ✓پیوت میانه‌مانند
بدترینO(n²) ✗پیوت همیشه کوچک‌ترین/بزرگ‌ترین (داده مرتب!)
حافظهO(log n)پشته بازگشت

چرا با وجود بدترین O(n²) محبوب‌ترین است؟

انتخاب پیوت — حیاتی!

نکته: sort و sorted پایتون از TimSort استفاده می‌کنند (ترکیب Merge + Insertion)؛ اما Quick Sort پایه بسیاری از کتابخانه‌های دیگر مثل C است (qsort).

جمع‌بندی

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

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