MQL5Book/Include/QuickSortT.mqh

54 lines
1.7 KiB
MQL5
Raw Permalink Normal View History

2025-05-30 16:09:41 +02:00
//+------------------------------------------------------------------+
//| QuickSortT.mqh |
//| Copyright 2021, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Templatized class for quick sorting of anything |
//+------------------------------------------------------------------+
template<typename T>
class QuickSortT
{
public:
void Swap(T &array[], const int i, const int j)
{
const T temp = array[i];
array[i] = array[j];
array[j] = temp;
}
virtual int Compare(T &a, T &b)
{
return a > b ? +1 : (a < b ? -1 : 0);
}
void QuickSort(T &array[], const int start = 0, int end = INT_MAX)
{
if(end == INT_MAX)
{
end = start + ArraySize(array) - 1;
}
if(start < end)
{
int pivot = start;
for(int i = start; i <= end; i++)
{
// previous implementation of comparison with opeartor '>'
// is replaced with the virtual method Compare to allow overrides
// if(!(array[i] > array[end])) -
if(Compare(array[i], array[end]) <= 0)
{
Swap(array, i, pivot++);
}
}
--pivot;
QuickSort(array, start, pivot - 1);
QuickSort(array, pivot + 1, end);
}
}
};
//+------------------------------------------------------------------+