欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

Introsort(内省排序)- MetaTrader 5 库

author emer | 189 人阅读 | 0 人评论 |

快速排序
快速排序是一种分而治之的算法,其工作原理是选择数组中的一个主元,然后将其他元素划分为两个子数组,检查元素是否大于或小于。平均而言,快速排序算法需要 O(nlog(n)) 时间,最坏情况复杂度为 O(n2)。

堆排序
堆排序算法是一种基于二叉堆的比较排序方法。它是一种不稳定的排序算法,最坏情况和平均情况时间复杂度为 O(nlog(n)),最好情况时间复杂度为 O(n)。

插入排序
插入排序算法是一种简单的排序方法,一次构建最终的排序数组。最坏情况和平均情况的时间复杂度为 O(n2),最好的情况是 O(n)。

Introsort算法结合了这三种算法的优点。它从快速排序开始,当递归深度超过基于开始排序的元素数量的级别时,切换到堆排序,当元素数量小于某个阈值时,切换到插入排序。

Introsort 具有特别好的运行时行为。它是当今使用的最快的比较排序算法之一,并且是 C++ STL、Microsoft .NET Framework 类库、GNU 标准 C++ 库和 LLVM libc++ 库提供的 std::sort 算法的通常实现。

http://en.wikipedia.org/wiki/Introsort

https://iq.opengenus.org/intro-sort/

//+------------------------------------------------------------------+
//|简介                                                         |
//+------------------------------------------------------------------+
/**
 * 使用 less 比较函数对输入数组进行就地排序。
 * 您可以指定自己的比较函数。如果没有函数
 * 指定,使用升序排序。
 */
模板<类型名>空白Introsort(T &arr[]);

比较函数少:

您可以指定自己的比较函数。如果未指定函数,则使用升序排序。自定义 Less() 函数采用两个参数并包含决定它们在排序数组中的相对顺序的逻辑。这个想法是提供灵活性,以便 Introsort() 可用于任何类型(包括用户定义的类型),并可用于获取任何所需的顺序(递增、递减或任何其他)。例如,要按自定义排序顺序对对象或结构(用户定义的类型)数组进行排序:


附件下载

📎 introsort.mqh (16.68 KB)

📎 introsort_benchmark.mq5 (3.23 KB)

📎 sort_string_array.mq5 (2.07 KB)

📎 sort_structure_array.mq5 (3.9 KB)

Source: MQL5 #41836

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录