You are not allowed to perform this action

مرتب‌سازی شمارشی

تعریف

مرتب‌سازی شمارشی (Counting Sort) الگوریتمی غیرمقایسه‌ای است و بسته به روش پیاده‌سازی می‌تواند پایدار باشد. این الگوریتم عناصر را بر اساس شمارش تعداد تکرار هر مقدار مرتب می‌کند و از مرتبه زمانی $\mathcal{O}(n + m)$ است که $m$ دامنه مقادیر ممکن عناصر است.

الگوریتم

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

1. پیدا کردن بیشینه مقدار آرایه.

2. ساخت آرایه شمارش به طول بیشینه مقدار $+ $1 و صفر کردن آن.

3. پیمایش آرایه ورودی و شمارش تکرار هر مقدار.

4. تغییر آرایه شمارش به آرایه تجمعی.

5. پیمایش آرایه ورودی از انتها به ابتدا و قراردادن عناصر در موقعیت درست در آرایه خروجی (برای پایدار بودن الگوریتم).

مثلاً برای آرایه $4, 2, 2, 8, 3, 3, 1$ الگوریتم به این صورت عمل می‌کند:

1. آرایه شمارش: $$ (0,1,2,2,1,0,0,0,1)$$

2. آرایه تجمعی: $$ (0,1,3,5,6,6,6,6,7)$$

پیچیدگی‌ الگوریتم

زمان اجرا در حالت کلی برابر $\mathcal{O}(n + m)$ است که $n$ تعداد عناصر و $m$ مقدار بزرگ‌ترین عنصر است. در داده‌هایی که دامنه مقادیر کوچک باشد، بسیار سریع عمل می‌کند.

پیاده‌سازی اولیه