introsort – array sorting algorithm – library MetaTrader 5

//+------------------------------------------------------------------+
//|                                                    Introsort.mq5 |
//|                                    2019-2021, dimitri pecheritsa |
//|                                         mql5.com/en/users/dmipec |
//|------------------------------------------------------------------|
//|   c| array sorting algorithm                                     |
//|  introsort or introspective sort is a hybrid sorting algorithm   |
//|that provides both fast average performance and (asymptotically)  |
//|optimal worst-case performance. it begins with quicksort, it      |
//|switches to heapsort when the recursion depth exceeds a level     |
//|based on (the logarithm of) the number of elements being sorted   |
//|and it switches to insertion sort when the number of elements is  |
//|below some threshold. this combines the good parts of the three   |
//|algorithms, with practical performance comparable to quicksort on |
//|typical data sets and worst-case o(n log n) runtime due to the    |
//|heap sort. since the three algorithms it uses are comparison      |
//|sorts, it is also a comparison sort.                              |
//|  introsort was invented by david musser in 1997, in which he also|
//|introduced introselect, a hybrid selection algorithm based on     |
//|quickselect (a variant of quicksort), which falls back to median  |
//|of medians and thus provides worst-case linear complexity, which  |
//|is optimal. both algorithms were introduced with the purpose of   |
//|providing generic algorithms for the c++ standard library which   |
//|had both fast average performance and optimal worst-case          |
//|performance, thus allowing the performance requirements to be     |
//|tightened. introsort is in place and not stable                   |
//|  the most popular c++ stl algorithm sort() uses introsort.       |
//|------------------------------------------------------------------|
//| scr| introsort example                                           |
//+------------------------------------------------------------------+
#include <MqhAlgorithmsSortIntroIntrosort.mqh>
#include <MqhAlgorithmsSortIntroFunctions.mqh>
void OnStart()
  {
   int a[] = {3, 1, 23, -9, 233, 23, -313, 32, -9};
   ArraySort(a,new CIntroSort<int,int>,SORT_ORDER_ACCENDING);
   ArrayPrint(a);
  }
//+------------------------------------------------------------------+
//| >>>| -313   -9   -9    1    3   23   23   32  233                |
//+------------------------------------------------------------------+
📈 ROBOTFX MetaTrader Expert Advisors and Indicators to maximize profits and minimize the risks