0 Views
0 Downloads
0 Favorites
QuickSort
ÿþ//+------------------------------------------------------------------+

//|                                                    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 e" 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 <Mqh\Algorithms\QuickSort\QuickSort.mqh>

#include <Mqh\Algorithms\QuickSort\Functions.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

//   ...

//

//+------------------------------------------------------------------+

Comments