مرتب‌سازی درختی یک الگوریتم مرتب‌سازی می‌باشد که یک درخت جستجوی دودویی از کلیدهایی که باید مرتب شوند می‌سازد و آنگاه با پیمایش میان ترتیب درخت کلیدهای مرتب شده را به‌دست می‌آوریم.

زمینه کاربرد
------------

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

تحلیل کارایی
------------

درج یک عنصر در یک درخت جستجوی دودویی به طور میانگین از مرتبه((O(log(n است. بنابراین ساخت یک درخت جستجوی دودویی با n عضو از مرتبه((O(n log(n می‌باشد که یک درخت جستجو می‌سازدو همچنین یک مرتب‌سازی بهینه است.

### بدترین حالت

اضافه کردن ک عنصر جدید به یک درخت جستجوی دودویی از(O(n زمان می‌برد. یعنی هنگامی که درخت شبیه به یک لیست پیوندی ساده می‌شود باعث می‌شود که در بدترین حالت این الگوریتم از مرتبه (O(n۲ زمان می‌برد.  
البته با استفاده از گسترش‌هایی از درخت دودویی جستجو می‌توان رفتار بدترین حالت را بهبود داد و در بدترین حالت هم از((O(n log(n باشد. پس مرتب‌سازی درختی به لحاظ تئوری هم بهینه است.

غالب پردازش
-----------

غالب پردازش در یک مرتب‌سازی درختی درج در درخت دودویی است با فرض اینکه زمان بازیابی اطلاعات (O(n باشد.

برنامه نویسی
------------

در زیر تکه برنامه سی پلاس پلاس را آورده‌ایم.  

multiset کلاسی در سی پلاس پلاس می‌باشد که در حقیقت یک درخت جستجوی دودویی خاص می‌باشد که این امکان را فراهم می‌سازد که در بدترین حالت هم درج بهینه در این داده ساختار از ((O(log(n داشته باشیم.

```
#include <set> // for multiset
#include <algorithm> // for copy
#include <iterator> // for iterator\_traits
 
template <typename Iterator>
void binary\_tree\_sort(Iterator begin, Iterator end)
{
 // C++'s multiset class is a self-balancing binary search tree that allows duplicates
 // Add each element in input range to the tree
 std::multiset<typename std::iterator\_traits<Iterator>::value\_type> tree(begin, end);
 
 // Read elements in ascending order by simply traversing the tree.
 std::copy(tree.begin(), tree.end(), begin);
}

```

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

1. ↑  داده ساختارها و مبانی الگوریتم ها- محمد قدسی-۱۳۸۸ ص۲۲۱

منابع
-----

* قدسی، محمد. *داده ساختارها و مبانی الگوریتم ها*. موسسه فرهنگی فاطمی: نشر، ۱۳۸۸.
* کتاب CLRS
* مشارکت‌کنندگان ویکی‌پدیا. «Tree Sort». در *دانشنامهٔ ویکی‌پدیای انگلیسی*، بازبینی‌شده در ۴ آوریل ۲۰۱۰.

برای اطلاعات بیشتر
------------------

* Binary Tree Java Applet and Explanation

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

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

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

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

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

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

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

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

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

 |