مرتبسازی شمارشی
تعریف
مرتبسازی شمارشی (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$ مقدار بزرگترین عنصر است. در دادههایی که دامنه مقادیر کوچک باشد، بسیار سریع عمل میکند.