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

堆排序 - 数组排序算法 - MetaTrader 5 库

author emer | 509 人阅读 | 0 人评论 |
//+------------------------------------------------------------------+
//|                                                     堆排序.mq5 |
//|                                  2019 - 2021,迪米特里·佩切里察 |
//|                             https://www.mql5.com/en/users/dmipec |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|堆排序 - 数组排序算法                              |
//|  最好 - n log n,平均 - n log n,最差 - n log n              |
//|  内存 - 1、稳定 - 否、方法 - 选择                     |
//|  堆排序是选择排序的更高效的版本。它|
//|还可以通过确定    | 的最大(或最小)元素来工作
//|列表,将其放在列表的末尾(或开头),     |
//|然后继续列表的其余部分,但完成此操作|
//|通过使用称为堆的数据结构来高效地执行任务,a       |
//|特殊类型的二叉树。数据列表制作完成后     |
//|放入堆中,根节点保证是最大的(或者    |
//|最小)元素。当它被移除并放置在    | 的末尾时
//|列表,堆被重新排列,因此剩余的最大元素|
//|移动到根。使用堆,找到下一个最大的       |
//|element 需要 o(log n) 时间,而不是线性扫描 o(n) |
//|简单选择排序。这允许堆排序以 o(n log |
//|n) 时间,这也是最坏情况的复杂度。              |
//|  尽管在大多数机器上实践中比    | 慢一些
//|实现良好的快速排序,它的优点是更加        |
//|有利的最坏情况 o(n log n) 运行时间。堆排序是一种就地排序
//|算法,但它不是一个稳定的排序。                           |
//|  堆排序是由 j 发明的。 w。 j。 1964 年威廉姆斯。这是    |
//|也是堆的诞生,威廉姆斯已经将其描述为    |
//|本身就是有用的数据结构。同年,r. w。   |
//|floyd 发布了一个可以对数组进行排序的改进版本      |
//|就地,继续他早期对树排序的研究       |
//|算法。                                                        |
//|  堆排序主要与快速排序竞争,另一个非常         |
//|高效通用的基于比较的近乎就地排序 |
//|算法。                                                        |
//+------------------------------------------------------------------+
//|与其他算法比较                                  |
//|  由于某些因素,快速排序通常会更快,但是 |
//|快速排序最坏情况的运行时间是o(n2),即      |
//|对于大数据集来说是不可接受的,可以故意          |
//|在有足够的实现知识的情况下触发,创建  |
//|安全风险。                                                  |
//|  因此,由于堆排序的 o(n log n) 上限 |      |
//|其辅助存储的运行时间和常数上限,   |
//|具有实时约束的嵌入式系统或相关系统|
//|跟安全性经常使用堆排序,比如linux内核。       |
//|  堆排序还与合并排序竞争,后者具有相同的时间 |
//|边界。归并排序需要 Ω(n) 辅助空间,但堆排序 |   |
//|仅需要恒定的数量。堆排序通常运行得更快
//|在具有小或慢数据缓存的机器上实践中,并且确实
//|不需要那么多的外部存储器。另一方面,合并     |
//|排序相对于堆排序有几个优点:                        |
//|    数组上的合并排序具有更好的数据缓存       |
//|性能,在现代桌面上通常优于堆排序       |
//|计算机,因为合并排序频繁访问连续的       |
//|内存位置(良好的引用位置);堆排序           |
//|引用分布在整个堆中。                        |
//|    堆排序不是稳定排序;归并排序是稳定的。          |
//|    归并排序并行性很好,可以达到接近线性的效果|
//|通过简单的实现来加速;堆排序不是一个明显的|
//|并行算法的候选者。                               |
//|    合并排序可以适用于对单链表进行操作
//|有 o(1) 额外空间。堆排序可以适用于操作      |
//|只有 o(1) 额外空间开销的双向链表。          |
//|    归并排序用于外部排序;堆排序不是。      |
//|引用的局部性是问题所在。                               |
//|  introsort 是堆排序的替代方案,它结合了快速排序 |
//|和堆排序保留两者的优点:最坏情况下的速度    |
//|堆排序和快速排序的平均速度。                          |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//|脚本程序启动函数                                   |
//|堆排序示例                                                |
//|  按颜色(键)对符号(项目)进行排序。 MQL 中的颜色是         |
//|整数。类似地,项目可以按任何其他键排序,例如通过 |
//|数字                                                            |
//+------------------------------------------------------------------+
#包括#包括空白 启动时空白)
  {//--- 从终端将符号加载到数组(项目)  细绳符号[];
   符号加载(符号);//--- 将符号的颜色加载到键数组中  颜色键[];
   SymbolKeysColor(符号,键);//--- 使用堆排序按颜色升序对符号进行排序
//算法  数组排序(按键、符号、新的廉价排序<颜色,细绳>);//--- 打印符号表以检查结果   SymbolsPrint(符号);
  }//--------------------------------------------------------------------------------
//       符号 |                    颜色名称(id)|   数字
//--------------------------------------------------------------------------------
//       OGZD.L |                    clrGold (55295) |        3
//       SGGD.L |                    clrGold (55295) |        3
//       MGNT.L |                    clrGold (55295) |        3
//       ATAD.L |                    clrGold (55295) |        3
//       PLZL.L |                    clrGold (55295) |        3
//       五.L |                    clrGold (55295) |        3
//       ROSN.L |                    clrGold (55295) |        3
//       NVTK.L |                    clrGold (55295) |        3
//       SBER.L |                    clrGold (55295) |        3
//       MNOD.L |                    clrGold (55295) |        3
//       SVST.L |                    clrGold (55295) |        3
//       NLMK.L |                    clrGold (55295) |        3
//       LKOD.L |                    clrGold (55295) |        3
//       XAGUSD |                 clr卡其色 (9234160) |        5
//       XAUUSD |                 clr卡其色 (9234160) |        3
//       LTCUSD |    clrMediumSpringGreen (10156544) |        2
//       XRPUSD |    clrMediumSpringGreen (10156544) |        4
//       ETHBTC |    clrMediumSpringGreen (10156544) |        5
//       BTCEUR |    clrMediumSpringGreen (10156544) |        2
//   Crypto.ALT |    clrMediumSpringGreen (10156544) |        2
//       ETHEUR |    clrMediumSpringGreen (10156544) |        2
//   Crypto.Top |    clrMediumSpringGreen (10156544) |        2
//       EOSUSD |    clrMediumSpringGreen (10156544) |        3
//       LTCBTC |    clrMediumSpringGreen (10156544) |        5
//       BTCUSD |    clrMediumSpringGreen (10156544) |        2
//       XBTUSD |    clrMediumSpringGreen (10156544) |        2
//       ETHUSD |    clrMediumSpringGreen (10156544) |        2
//       DSHUSD |    clrMediumSpringGreen (10156544) |        2
//         ADBE |        clrPaleGoldenrod (11200750) |        2
//           下午 |        clrPaleGoldenrod (11200750) |        2
//          MMM |        clrPaleGoldenrod (11200750) |        2
//           EA |        clrPaleGoldenrod (11200750) |        2
//          慧与 |        clrPaleGoldenrod (11200750) |        2
//           VZ |        clrPaleGoldenrod (11200750) |        2
//         MSFT |        clrPaleGoldenrod (11200750) |        2
//          PFE |        clrPaleGoldenrod (11200750) |        2
//        GOOGL |        clrPaleGoldenrod (11200750) |        2
//          JNJ |        clrPaleGoldenrod (11200750) |        2
//           学士 |        clrPaleGoldenrod (11200750) |        2
//          猫 |        clrPaleGoldenrod (11200750) |        2
//          NKE |        clrPaleGoldenrod (11200750) |        2
//           PG |        clrPaleGoldenrod (11200750) |        2
//          PEP |        clrPaleGoldenrod (11200750) |        2
//           KO |        clrPaleGoldenrod (11200750) |        2
//           总经理 |        clrPaleGoldenrod (11200750) |        2
//           GE |        clrPaleGoldenrod (11200750) |        2
//         苹果 |        clrPaleGoldenrod (11200750) |        2
//         PYPL |        clrPaleGoldenrod (11200750) |        2
//          LLY |        clrPaleGoldenrod (11200750) |        2
//           FB |        clrPaleGoldenrod (11200750) |        2
//        BRK.B |        clrPaleGoldenrod (11200750) |        2
//          IBM |        clrPaleGoldenrod (11200750) |        2
//            V |        clrPaleGoldenrod (11200750) |        2
//         INTC |        clrPaleGoldenrod (11200750) |        2
//          WFC |        clrPaleGoldenrod (11200750) |        2
//            C |        clrPaleGoldenrod (11200750) |        2
//          PRU |        clrPaleGoldenrod (11200750) |        2
//         ATVI |        clrPaleGoldenrod (11200750) |        2
//           GS |        clrPaleGoldenrod (11200750) |        2
//          摩根大通 |        clrPaleGoldenrod (11200750) |        2
//          NEM |        clrPaleGoldenrod (11200750) |        2
//         特斯拉 |        clrPaleGoldenrod (11200750) |        2
//          CVX |        clrPaleGoldenrod (11200750) |        2
//          DAL |        clrPaleGoldenrod (11200750) |        2
//          WMT |        clrPaleGoldenrod (11200750) |        2
//         eBay |        clrPaleGoldenrod (11200750) |        2
//         SBUX |        clrPaleGoldenrod (11200750) |        2
//          MCD |        clrPaleGoldenrod (11200750) |        2
//         NFLX |        clrPaleGoldenrod (11200750) |        2
//          UPS |        clrPaleGoldenrod (11200750) |        2
//         亚马逊 |        clrPaleGoldenrod (11200750) |        2
//         FOXA |        clrPaleGoldenrod (11200750) |        2
//         NVDA |        clrPaleGoldenrod (11200750) |        2
//          XOM |        clrPaleGoldenrod (11200750) |        2
//          DIS |        clrPaleGoldenrod (11200750) |        2
//        CMCSA |        clrPaleGoldenrod (11200750) |        2
//         CSCO |        clrPaleGoldenrod (11200750) |        2
//          BAC |        clrPaleGoldenrod (11200750) |        2
//         ORCL |        clrPaleGoldenrod (11200750) |        2
//   .JP225Cash |                 clrPink (13353215) |        1
//          WTI |                 clrPink (13353215) |        2
//        布伦特 |                 clrPink (13353215) |        2
//  .USTECHCash |                 clrPink (13353215) |        1
//    .US30Cash |                 clrPink (13353215) |        1
//   .US500Cash |                 clrPink (13353215) |        1
//    .DE30Cash |                 clrPink (13353215) |        1
//       GBXUSD |                 clr梅 (14524637) |        5
//       美元/墨西哥比索 |             clr蜜露 (15794160) |        5
//       美元尝试 |             clr蜜露 (15794160) |        5
//       美元/兹罗提 |             clr蜜露 (15794160) |        5
//       欧元兑美元 |             clr蜜露 (15794160) |        5
//       美元日元 |             clr蜜露 (15794160) |        3
//       美元兑瑞郎 |             clr蜜露 (15794160) |        5
//       欧元兑新西兰元 |             clr蜜露 (15794160) |        5
//       CADJPY |             clr蜜露 (15794160) |        3
//       美元加元 |             clr蜜露 (15794160) |        5
//       新西兰元美元 |             clr蜜露 (15794160) |        5
//       欧元日元 |             clr蜜露 (15794160) |        3
//       NZDJPY |             clr蜜露 (15794160) |        3
//       NZDCHF |             clr蜜露 (15794160) |        5
//       欧元兑英镑 |             clr蜜露 (15794160) |        5
//       CADCHF |             clr蜜露 (15794160) |        5
//       澳元日元 |             clr蜜露 (15794160) |        3
//       NZDCAD |             clr蜜露 (15794160) |        5
//       GBPCHF |             clr蜜露 (15794160) |        5
//       欧元 |             clr蜜露 (15794160) |        5
//       英镑兑美元 |             clr蜜露 (15794160) |        5
//       英镑日元 |             clr蜜露 (15794160) |        3
//       欧元加元 |             clr蜜露 (15794160) |        5
//       澳元兑美元 |             clr蜜露 (15794160) |        5
//       英镑新西兰元 |             clr蜜露 (15794160) |        5
//       英镑加元 |             clr蜜露 (15794160) |        5
//       欧元 |             clr蜜露 (15794160) |        5
//       美元离岸人民币 |             clr蜜露 (15794160) |        5
//       英镑兑澳元 |             clr蜜露 (15794160) |        5
//       美元兑俄罗斯卢布 |             clr蜜露 (15794160) |        4
//       美元扎尔 |             clr蜜露 (15794160) |        5
//       EURPLN |             clr蜜露 (15794160) |        5
//       瑞郎日元 |             clr蜜露 (15794160) |        3
//       澳元/新西兰元 |             clr蜜露 (15794160) |        5
//       AUDCHF |             clr蜜露 (15794160) |        5
//       AUDCAD |             clr蜜露 (15794160) |        5
//+------------------------------------------------------------------+



附件下载

📎 heapsort.mq5 (9.41 KB)

📎 heapsort.mqh (19.87 KB)

📎 functions.mqh (4.25 KB)

📎 asorter.mqh (2.79 KB)

📎 comparefunction.mqh (6.39 KB)

Source: MQL5 #32775

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