堆排序 - 数组排序算法 - MetaTrader 5 库
//+------------------------------------------------------------------+ //| 堆排序.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小时后评论,即可解锁附件下载
立即登录
