مرتب‌سازی درونگرا

مرتب‌سازی درونگرا، یک الگوریتم جستجو است که توسط دیوید ماسر (David Musser) در سال ۱۹۹۷ طراحی شد. این الگوریتم ابتدا با فراخوانی مرتب‌سازی سریع شروع کرده و هنگامی بخش بازگشتی مرتب‌سازی سریع به عمق مشخصی که متناسب با لگاریتم تعداد عناصر موجود است رسید، الگوریتم مرتب‌سازی هرمی را فراخوانی می‌کند. این گونه پیاده‌سازی باعث می‌شود که الگوریتم هم سرعت زیاد مرتب‌سازی سریع را روی داده‌های معمولی داشته باشد و هم بدترین زمان اجرای آن  باشد.
در الگوریتم مرتب‌سازی سریع یکی از مهم‌ترین مراحل انتخاب نقطه محور (Pivot Element) می‌باشد که عناصر درون آرایه حول آن بخش بندی می‌شوند. ساده‌ترین الگوریتم انتخاب نقطه محور، انتخاب اولین یا آخرین عنصر آرایه است که باعث می‌شود الگوریتم برای آرایه‌های مرتب زمان اجرای بدی داشته باشد. الگوریتم‌های دیگری نیز مانند میانه ۳ (median-of-۳) وجود دارند، اما آن‌ها هم در بدترین حالت زمان اجرای (O(n² خواهند داشت. این نوع ورودی‌ها می‌توانند هنگام حمله‌های انکار سرویس در اینترنت به کار روند.
شبه کد الگوریتم با بخش بندی میانه ۳ به صورت زیر می‌باشد:

Algorithm Introsort(A, f, b)
       A: Input array  A[f]… A[b - 1]
       f: The first Position of sequence
       b: The first position beyond the end of sequence

      Introsort_Loop(A, f, b, 2 * log(b – f))
      InsertionSort(A, f, b)

Algorithm Introsort_Loop(A, f, b, depth_limit)
   while b – f > size_threshold
      do if depth_limit = 0
           then HeapSort(A, f, b)
                  return
      depth_limit = depth_limit – 1
      p = Partiotion(A, f, b, MedianOf3(A[f], A[f + (b – f)/2], A[b – 1]))
      Introsort_Loop(A, p, b, depth_limit)
      b = p

منابع 

 

الگوریتم‌های مرتب‌سازی
مرتب‌سازی‌های سنجشی