**مرتب‌سازی Flash** الگوریتم مرتب‌سازی ای بر اساس توزیع احتمال است که برای داده‌های با توزیع یکنواخت، با حافظه نسبتا بیشتر، دارای پیچیدگی زمان اجرای O(n) است. این الگوریتم اولین بار در سال ۱۹۹۸ توسط Karl-Dietrich Neubert منتشر شد.

مفهوم
-----

ایده اصلی مرتب‌سازی Flash این است که برای مجموعه داده‌ای که دارای توزیع احتمال یکنواخت است، با داشتن حد بالا و پایین مجموعه، می‌توان مکان هر عضو را تخمین زد. برای مثال برای مجموعه ای که کمینه آن ۱ و بیشینه آن ۱۰۰ است و ۵۰ هم عضوی از آن مجموعه است منطقی به نظر می‌رسد که پس از مرتب‌سازی، مکان ۵۰ در وسط آرایه مرتب شده باشد. این مکان تخمین زده شده یک کلاس نامیده می‌شود. اگر اعضای مجموعه را از ۱ تا m شماره گذازی کنیم، کلاس A\_i به این صورت محاسبه می‌شود:

  

  {\displaystyle K(A\_{i})=1+{\textrm {INT}}\left((m-1){\frac {A\_{i}-A\_{\textrm {min}}}{A\_{\textrm {max}}-A\_{\textrm {min}}}}\right)}

  

که A مجموعه ورودی است و حاصل عبارت شماره کلاسی است که عضو i ام به آن تعلق دارد.
حد بالا و پایین پوشش داده شده برای تمام کلاس‌ها، به غیر از کلاس آخر که شامل بیشینه هاست، یکسان است. این کلاس بندی اطمینان می‌دهد که هر داده در یک کلاس از داده‌های کلاس پایین‌تر بزرگتر است. این کلاس بندی در واقع یک ترتیب جزئی است که که تعداد وارونگی‌ها را کاهش می‌دهد. سپس برای هر کلاس مرتب‌سازی درجی انجام می‌شود. تا جایی که توزیع احتمال یکنواخت باشد، اندازه کلاس‌ها ثابت می‌ماند و مرتب‌سازی درجی بهینه خواهد بود.

پیاده‌سازی با حافظه بهینه
-------------------------

برای بهینه کردن حافظه، الگوریتم از ساختمان داده‌های اضافه برای ذخیره کلاس‌ها استفاده نمی‌کند، بلکه حدود بالا و پایین هر کلاس را در وکتوری ای به نام L ذخیره می‌کند. حدود بالا از شمارش تعداد اعضای کلاس و کلاس‌های قبلش حاصل می‌شود. از این حدود بالا می‌توان به عنوان اشاره گر به کلاس‌ها استفاده کرد.
کلاس بندی توسط تعدادی دور انجام می‌شود، به این صورت که یک سر دور از آرایه ورودی A گرفته می‌شود و کلاس اش محاسبه می‌شود. یک عضو سردور معتبر است اگر کلاس بندی نشده باشد. وقتی الگوریتم روی عناصر ورودی حرکت می‌کند از عناصر کلاس بندی شده پرش می‌شود و عناصر کلاس بندی نشده برای ساخت دور جدید استفاده می‌شوند.

سرعت
----

در حالت ایده آل داده‌ها به گونه‌ای کلاس بندی می‌شوند که اندازه کلاس‌ها تقریباً مساوی باشد، از آنجا که هزینه مرتب‌سازی هر کلاس {\displaystyle m\*O(m)} است و با فرض این که m کلاس داشته باشیم و کلاس‌ها را با مرتب‌سازی درجی در کنار هم قرار دهیم هزینه برابر {\displaystyle m\*O(1)} یا{\displaystyle O(m)} می‌شود و چون m ضریبی از n است پس هزینه نهاییO(n) می‌شود.

  

در بدترین حالت کلاس بندی به گونه‌ای انجام می‌شود که تعداد کلاس‌ها زیاد و در هر کلاس تقریباً یک عنصر قرار می‌گیرد، در این حالت هزینه نهایی برابر هزینه مرحله آخر که قرار دادن کلاس‌ها در کنار هم با مرتب‌سازی درجی است، می‌شود. در نتیجه هزینه بدترین حالت O(n^{2}) می‌شود.
انتخاب تعداد کلاس‌ها {\displaystyle (m)} بر هزینه الگوریتم بسیار تأثیرگذار است، طی تحقیقی که Neubert انجام داده است {\displaystyle m=0.42n} مقدار بهینه برای m خواهد بود.

  

با توجه به فرایند کلاس بندی، مرتب‌سازی Flash پایدار نیست.

پانویس
------

1. 1 2 3  Neubert, Karl-Dietrich (1998). "The Flashsort Algorithm". *Dr. Dobb's Journal*: 123. Retrieved 2007-11-06. `{{cite journal}}`: Unknown parameter `|month=` ignored (help)
2. 1 2  Karl-Dietrich Neubert (1998). "The FlashSort Algorithm". Retrieved 2007-11-06.
3. ↑  Li Xiao, Xiaodong Zhang, Stefan A. Kubricht. "Cache-Effective Quicksort". *Improving Memory Performance of Sorting Algorithms*. Department of Computer Science, College of William and Mary, Williamsburg, VA 23187-8795. Archived from the original on 2 November 2007. Retrieved 2007-11-06.`{{cite web}}`: نگهداری یادکرد:نام‌های متعدد:فهرست نویسندگان (link)

پیوند به بیرون
--------------

* Sorting in Linear time
* Implementations of Randomized Sorting on Large Parallel Machines (1992)
* Implementation of Parallel Algorithms (1992)[*پیوند مرده*]
* Visualization of Flashsort


| * ن
* ب
* و
الگوریتم‌های مرتب‌سازی |
| --- |
| تئوری | 
* نظریه پیچیدگی محاسباتی
* نمادهای O و Ω و Θ
* ترتیب کامل
* الگوریتم مرتب‌سازی
* شبکه مرتب‌سازی
* مرتب‌سازی مقایسه‌ای

 |  |
| گونه‌های تعویضی | 
* حبابی
* دست‌نشانده
* زوج و فرد
* ساختگی
* سریع
* شانه‌ای
* کوکتلی
* گورزاد

 |
| گونه‌های انتخابی | 
* انتخابی
* دایره‌ای
* درخت دکارتی
* روان
* مسابقه‌ای
* هرمی

 |
| گونه‌های درجی | 
* درجی
* درختی
* شکیبانه
* صدفی
* کتابخانه‌ای
* گسترده

 |
| گونه‌های ادغامی | 
* ادغامی آبشاری
* ادغامی چندمرحله‌ای
* ادغامی نوسانی
* ادغامی
* رشته‌ای

 |
| گونه‌های توزیعی | 
* انفجاری
* پایه‌ای
* پرچم آمریکا
* مجاور-نگاشت (پروکس‌مپ)
* سطلی
* شمارشی
* فلش
* لانه‌کبوتری
* مهره‌ای

 |
| گونه‌های همرو | 
* ادغامی دسته‌ای فرد-زوج
* بایتونیک
* جفتی

 |
| گونه‌های دوگانه | 
* آن‌شافل
* تیم
* جی‌سورت
* درونگرا
* گسترش‌یافته

 |
| گونه‌های دیگر | 
* اسپاگتی
* توپولوژیکی
* کلوچه‌ای

 |