selection sort – array sorting algorithm – library MetaTrader 5

//+------------------------------------------------------------------+
//|                                                SelectionSort.mq5 |
//|                                    2019-2021, dimitri pecheritsa |
//|                                         mql5.com/en/users/dmipec |
//+------------------------------------------------------------------+
//| selection sort - array sorting algorithm                         |
//+------------------------------------------------------------------+
//|  best: n^2, average: n^2, worst: n^2                             |
//|  memory: 1, stable: no, method: selection                        |
//|  note: stable with o(n) extra space or when using linked lists.  |
//+------------------------------------------------------------------+
//|  in computer science, selection sort is an in-place comparison   |
//|sorting algorithm. it has an o(n2) time complexity, which makes   |
//|it inefficient on large lists, and generally performs worse than  |
//|the similar insertion sort. selection sort is noted for its       |
//|simplicity and has performance advantages over more complicated   |
//|algorithms in certain situations, particularly where auxiliary    |
//|memory is limited.                                                |
//|  the time efficiency of selection sort is quadratic, so there    |
//|are a number of sorting techniques which have better time         |
//|complexity than selection sort. one thing which distinguishes     |
//|selection sort from other sorting algorithms is that it makes the |
//|minimum possible number of swaps, n − 1 in the worst case.        |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| script program start function                                    |
//|  [use] a selection sort example. sort deals by symbol            |
//+------------------------------------------------------------------+
#include <MqhAlgorithmsSelectionSortSelectionSort.mqh>
#include <MqhAlgorithmsSelectionSortFunctions.mqh>
void OnStart(void)
  {
//--- load deals from the terminal starting from the beginning of 
//2021 till current day. they will be treated as the items array by 
//the sorter
   ulong deals[];
   DealsLoad(deals,D'2021.01.01',0);
//--- create the keys array which contains the symbols of each deal 
//from the deals array, which is the basis for sorting
   string symbols[];
   DealsKeySymbol(deals,symbols);
//--- sort deals by symbols in descending order with the selection 
//sort algorithm
   ArraySort(symbols,deals,new CSelectionSort<string,ulong>,false);
//--- check the result of sorting by printing a table of symbols. 
//your table will look different
   DealsPrint(deals);
  }
//--------------------------------------------------------------------
//                          deal | symbol
//--------------------------------------------------------------------
//                     170477949 | XAUUSD
//                     170764903 | XAUUSD
//                     170764902 | XAUUSD
//                     170252156 | XAUUSD
//                     170541532 | XAUUSD
//                     172313700 | BTCUSD
//                     172313699 | BTCUSD
//                     172313666 | BTCUSD
//                     172313530 | BTCUSD
//                     172313512 | BTCUSD
//                     172313511 | BTCUSD
//                     172313502 | BTCUSD
//                     172313501 | BTCUSD
//                     172313500 | BTCUSD
//                     172313493 | BTCUSD
//                     172313490 | BTCUSD
//                     172313488 | BTCUSD
//                     172313474 | BTCUSD
//                     172313453 | BTCUSD
//                     172313412 | BTCUSD
//                     171147845 | BTCUSD
//                     171145409 | BTCUSD
//                     171145256 | BTCUSD
//                     171145029 | BTCUSD
//                     171011667 | BTCUSD
//                     170983807 | BTCUSD
//                     170720576 | BTCUSD
//                     170429897 | BTCUSD
//                     169998112 | BTCUSD
//                     169998099 | BTCUSD
//                     169990154 | BTCUSD
//--------------------------------------------------------------------
📈 ROBOTFX MetaTrader Expert Advisors and Indicators to maximize profits and minimize the risks