Introsort(内省排序)- MetaTrader 5 库
快速排序
快速排序是一种分而治之的算法,其工作原理是选择数组中的一个主元,然后将其他元素划分为两个子数组,检查元素是否大于或小于。平均而言,快速排序算法需要 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
💡 精彩内容推荐
✍️ 楼主最新发布
- •
- •
- •
- •
- •
- •
🔗 您可能感兴趣
- •
- •
- •
- •
- •
- •
