آرین سلیمان‌زاده
  • خانه
  • وبلاگ
  • پادکست‌ها
  • ویدیوها
  • کتابخانه
  • تماس با من
العربيةArabic
DeutschGerman
EnglishEnglish
فارسیPersian
한국어Korean
中文Chinese
پنل•تماس سریع

Languages

Choose your interface locale

ar

العربية

Arabic

de

Deutsch

German

en

English

English

fa

فارسی

Persian

ko

한국어

Korean

zh

中文

Chinese

درخواست همکاری یا مشاوره

پیام خود را درباره همکاری، مشاوره، توسعه محصول یا پروژه نرم‌افزاری ارسال کنید.

LinkedInپاسخ سریع
کتابخانه الگوریتم ←/مرتب‌سازی/مرتب‌سازی شمارشی
یادداشت کامل الگوریتم

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

Counting Sort

Counting Sort به‌جای مقایسه عناصر، تعداد تکرار هر key را می‌شمارد و بعد خروجی را بر اساس همین شمارش‌ها می‌سازد.

نوعالگوریتمدستهمرتب‌سازیسطحپایهپیچیدگی معمولO(n + k)
جواب کوتاه و حرفه‌ای

اول این مفهوم را در ذهن نگه دار

Counting Sort به‌جای مقایسه عناصر، تعداد تکرار هر key را می‌شمارد و بعد خروجی را بر اساس همین شمارش‌ها می‌سازد.

01
توضیح ساده

چطور کار می‌کند؟ ساده و مرحله‌ای

01

وقتی keyها عدد صحیح در یک بازه نسبتاً کوچک باشند بسیار سریع است.

02

پیچیدگی به n + k وابسته است؛ اگر بازه مقادیر خیلی بزرگ و sparse باشد حافظه هدر می‌رود.

02
روند اجرا

الگوریتم را به شکل تصمیم‌های پشت سر هم بخوان

01

ببین هر pass/partition/merge چه بخشی را قطعی می‌کند.

02

ناحیه‌ای را که دیگر نهایی شده دنبال کن.

03

تعداد comparison، swap/move و حافظه اضافه را تحلیل کن.

یک مثال کوچک برای فهم بهتر

یک ورودی خیلی کوچک را دستی اجرا کن و بعد از هر عملیات مهم state را بنویس. برای مرتب‌سازی شمارشی هدف این است که invariant را ببینی، نه اینکه کد را حفظ کنی.

پیاده‌سازی خوانا با JavaScriptJavaScript
function countingSort(a, max = Math.max(...a)) {
  const count = Array(max + 1).fill(0);
  for (const x of a) count[x]++;
  const out = [];
  for (let value = 0; value < count.length; value++) {
    for (let c = 0; c < count[value]; c++) out.push(value);
  }
  return out;
}
این کد را چطور بخوانی؟

syntax را حفظ نکن. stateای را که در هر خط تغییر می‌کند دنبال کن و آن را به invariant توضیح‌داده‌شده در بالا وصل کن.

پیچیدگی

O(n + k)

این Complexity را حفظی نگو. اول مشخص کن مربوط به کدام عملیات یا بعد ورودی است؛ بعد هزینه را از روی loopها، عمق recursion، عملیات ساختمان داده و فرض‌های preprocessing نتیجه بگیر.

03
چه زمانی استفاده کنیم؟

موارد مناسب

  • انتخاب را بر اساس اندازه داده، میزان مرتب بودن، بازه key، stable بودن و محدودیت حافظه انجام بده.
04
اشتباهات رایج

کجا معمولاً اشتباه می‌کنیم؟

  • فقط Average Big-O را مقایسه نکن.
  • stability، in-place بودن، عمق recursion و فرض‌های مربوط به domain را فراموش نکن.
در مصاحبه چطور توضیح بدهیم؟

مدل یک پاسخ حرفه‌ای

توضیح بده چرا می‌تواند از محدودیت comparison sortها عبور کند: از اطلاعات domain اعداد استفاده می‌کند و فقط مقایسه دوتایی انجام نمی‌دهد.

مسئله→ایده اصلی→Invariant / State→Big-O→Trade-off
چند سؤال مصاحبه‌ای سریع

مرتب‌سازی شمارشی چه مسئله‌ای را حل می‌کند؟

Counting Sort به‌جای مقایسه عناصر، تعداد تکرار هر key را می‌شمارد و بعد خروجی را بر اساس همین شمارش‌ها می‌سازد.

درباره Complexity چه چیزی باید بگویم؟

پیچیدگی معمول اینجا O(n + k) است، اما جواب کامل باید این هزینه را به representation، constraint ورودی و عملیات غالب وصل کند.

رایج‌ترین اشتباه چیست؟

فقط Average Big-O را مقایسه نکن.

موضوعات مرتبط برای ادامه مطالعهStable SortIn-place SortDivide and Conquer
منبع و مطالعه بیشتر

این درس برای مطالعه آرام و آمادگی مصاحبه به‌صورت مستقل نوشته شده و فهرست موضوعات آن از trekhleb/javascript-algorithms الهام گرفته است. مخزن اصلی implementationها، testها و README تخصصی هر موضوع را دارد.

باز کردن مخزن اصلی ↗
آرین سلیمان‌زاده

پورتفولیوی شخصی با تمرکز بر Agentic CRM، سامانه‌های هوشمند کسب‌وکار، مهندسی مدرن وب، طراحی سیستم‌های رابط کاربری و توسعه محصولات نرم‌افزاری کاربردی.

لینک‌های سریع

  • درباره من
  • وبلاگ
  • کتابخانه
  • تماس

ارتباط

  • soleimanzadeh.a.work@gmail.com
  • soleimanzadeh.uni@gmail.com

در دسترس: روزهای کاری

معمولاً پاسخ در ۲۴ ساعت

خبرنامه

به‌روزرسانی‌های مربوط به نوشته‌ها، پروژه‌ها و انتشارهای جدید را دریافت کنید.

© 2026 ariansoleimanzadeh.dev — تمامی حقوق محفوظ است.

لینکدین