مثالی از مرتب سازی رشته ای
**مرتب‌سازی رشته‌ای (مرتب‌سازی Strand)** یکی از الگوریتم مرتب‌سازی ادغامی می‌باشد. عملیاتی در استخراج مکرر فهرست‌های فرعی مرتب شده خارج از آن فهرستی که باید مرتب شود و ادغام آن‌ها با یکدیگر که خروجی یک آرایه نتیجه می‌باشد.
در هر تکرار از بین فهرست نامرتب شده، یک مجموعه اعضاء استخراج می‌شود که قبلاً مرتب بودند و ادغام آن مجموعه‌ها با هم.

"این الگوریتم زمانی کارایی خوبی دارد که داده‌های زیادی به ترتیب (نظم ارتباطی) داشته باشیم.
از فهرست‌های فرعی برای استخراج دادها از فهرست اصلی استفاده می‌کنیم همچنین دادههای بعدی باید بزرگتر از داده قبلی باشه و ترتیب وضعیت را حفظ کنند و بارها استخراج و ادغام در فهرست فرعی‌ها تا زمانی‌که که همه داده‌ها مرتب شوند انجام می‌شود."
نام این الگوریتم از "رشته یا Strand" که از داده‌های مرتب شده در فهرست نامرتب، که در یک زمان حذف می‌شود می‌آید؛ و این مرتب‌سازی مقایسهٔ که علت استفاده از مقایسه‌های که هنگام حذف رشته‌ها و زمانی که آن‌ها با ادغام شدنشان درون آرایه، مرتب شده می‌باشد.  

الگوریتم مرتب‌سازی رشته‌ای (Strand Sort)روش مناسبی برای داده‌های که در یک فهرست پیوندی ذخیره می‌شوند با توجه به اضافه و حذف مکرر داده‌های که داریم و در دیگر موارد استفاده ساختمان داده‌ای مانند یک آرایه، تا حد زیادی زمان اجرا و پیچیدگی الگوریتم به علت طولانی بودن اضافه‌ها و حذف‌ها، افزایش می‌یابد.
الگوریتم مرتب‌سازی رشته‌ای روش مناسبی برای داده‌ای است که از قبل حجم زیادی از داده‌ها مرتب شده باشند، زیرا که داده‌ها را می‌توان در یک رشته واحد برداشته شوند.

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

این الگوریتم در بدترین حالت (یک فهرست که به ترتیب معکوس مرتب‌سازی شده باشد) از مرتبهٔ Θ(n۲) است.

حالت متوسط
----------

این الگوریتم در حالت متوسط از مرتبهٔ Θ(n۲) است.

بهترین حالت
-----------

بهترین حالت این است که فهرست قبلاً مرتب شده‌باشد که در این حالت الگوریتم از مرتبه O(n) است.

مثال
----

| فهرست نامرتب | فهرست فرعی | فهرست مرتب |
| --- | --- | --- |
| ۳ ۱ ۵ ۴ ۲ |  |  |
| ۱ ۴ ۲ | ۳ ۵ |  |
| ۱ ۴ ۲ |  | ۳ ۵ |
| ۲ | ۱ ۴ | ۳ ۵ |
| ۲ |  | ۱ ۳ ۴ ۵ |
|  | ۲ | ۱ ۳ ۴ ۵ |
|  |  | ۱ ۲ ۳ ۴ ۵ |

1. یکبار فهرست نامرتب تجزیه می‌شود، عددهای صعودی (مرتب شده) گرفته می‌شوند.
2. فهرست فرعی (مرتب شده) را در صورتی که بار اول تکرارش باشد درون فهرست خالی ذخیره می‌کند.
3. دوباره تجزیه فهرست نامرتب و گرفتن عددهای نسبتا مرتب شده.
4. از آنجایی که فهرست مرتب‌سازی شده در حال حاضر پره شده، ادغام فهرست‌های فرعی در فهرست مرتب شده انجام می‌شود.
5. تکرار گام‌های (۳-۴) تا زمانی‌که هر دو فهرست نا مرتب و فهرست فرعی خالی شوند.

الگوریتم
--------

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

````
**procedure** strandSort( A : list of sortable items ) **defined as:**
  **while** length( A ) > ۰
    **clear** sublist
    sublist[ ۰ ] := A[ ۰ ]
    **remove** A[ ۰ ]
    **for each** i **in** ۰ **to** length( A ) - ۱ **do:**
      **if** A[ i ] > sublist[ last ] **then**
        **append** A[ i ] **to** sublist
        **remove** A[ i ]
      **end if**
    **end for**
    **merge** sublist **into** results
  **end while**
  **return** results
**end procedure**
````

### Haskell پیاده‌سازی با

```
merge [] l = l
merge l [] = l
merge l۱@(x۱:r1) l۲@(x۲:r2) =
    if x۱ < x2 then x۱:(merge r1 l۲) else x۲:(merge l1 r۲)

ssort [] = []
ssort l = merge strand (ssort rest)
    where (strand, rest) = foldr extend ([], []) l
          extend x ([],r) = ([x],r)
          extend x (s:ss,r) = if x <= s then (x:s:ss,r) else (s:ss,x:r)

```

### پیاده‌سازی به زبان پی اچ پی

```
function strandsort(array $arr) {
  $result = array();
  while (count($arr)) {
    $sublist = array();
    $sublist[] = array\_shift($arr);
    $last = count($sublist)-۱;
    foreach ($arr as $i => $val) {
      if ($val > $sublist[$last]) {
        $sublist[] = $val;
        unset($arr[$i]);
        $last++;
      }
    }

    if (!empty($result)) {
      foreach ($sublist as $val) {
        $spliced = false;
        foreach ($result as $i => $rval) {
          if ($val < $rval) {
            array\_splice($result, $i, ۰, $val);
            $spliced = true;
            break;
          }
        }

        if (!$spliced) {
          $result[] = $val;
        }
      }
    }
    else {
      $result = $sublist;
    }
  }

  return $result;
}

```

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

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

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

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

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

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

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

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

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

 |