//+------------------------------------------------------------------+ //|                                                    QuickSort.mq5 | //|                                    2019-2020, dimitri pecheritsa | //|                                                792112@gmail.com | //+------------------------------------------------------------------+ // //  quick sort - sorting algorithm // //  quick sort is a highly efficient sorting algorithm and is based //on partitioning of array of data into smaller arrays //  a large array is partitioned into two arrays one of which holds //values smaller than the specified value say pivot, based on which //the partition is made and another array holds values greater than //the pivot value //  quick sort partitions an array and then calls itself recursively //twice to sort the two resulting subarrays //  this algorithm is quite efficient for large-sized data sets as //its average and worst-case complexity are O(nlogn) and theta(n^2), //respectively // //  quick sort pivot algorithm // //  step 1: choose the highest index value has pivot //  step 2: take two variables to point left and right of the values //excluding pivot //  step 3: left points to the low index //  step 4: right points to the high //  step 5: while value at left is less than pivot move right //  step 6: while value at right is greater than pivot move left //  step 7: if both step 5 and step 6 does not match swap left and //right //  step 8: if left ≥ right, the point where they met is new pivot // //  quick sort algorithm // //  using pivot algorithm recursively, we end up with smaller //possible partitions //  each partition is then processed for quick sort //  step 1: make the right-most index value pivot //  step 2: partition the array using pivot value //  step 3: quicksort left partition recursively //  step 4: quicksort right partition recursively // //+------------------------------------------------------------------+ //| quick sort example - sort positions by open price in accending  | //| or descending order                                              | //+------------------------------------------------------------------+ #include <MqhAlgorithmsQuickSortQuickSort.mqh> #include <MqhAlgorithmsQuickSortFunctions.mqh> void OnStart()   { //---load tickets from terminal - the items to be sorted   string symbol=_Symbol;   ulong tickets[];   PositionsLoad(tickets,symbol); //---create keys for sorting - open prices of the positions   double keys[];   PositionsKeysPriceOpen(tickets,keys); //---sort positions by open price   CQuickSort<double,ulong> sorter;   bool accending_order=true; //false for descending   sorter.Sort(keys,tickets,accending_order); //---print positions   int digits=(int)SymbolInfoInteger(symbol,SYMBOL_DIGITS);   PositionsPrint(tickets,digits);   } // //  example output // //    EURUSD | 195762889 |  1.16667 //    EURUSD | 195806889 |  1.16939 //    EURUSD | 195998318 |  1.17384 //    EURUSD | 197300364 |  1.17602 //    EURUSD | 197454338 |  1.17680 //    EURUSD | 197488771 |  1.17859 //    EURUSD | 196985503 |  1.17924 //    EURUSD | 196058650 |  1.17935 //    EURUSD | 197513038 |  1.18068 //    EURUSD | 196921898 |  1.18179 //    EURUSD | 196317657 |  1.18295 //    EURUSD | 198719928 |  1.18325 //    EURUSD | 198678762 |  1.18342 //    EURUSD | 198673400 |  1.18387 //    EURUSD | 197932787 |  1.18482 //  ... // //+------------------------------------------------------------------+