码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Go 将在下个版本支持新型排序算法:pdqsort


    继Go 1.18支持泛型后,Go 将在下个版本中支持pdqsort排序算法再次引起了开发者们的热切讨论。

    在这里插入图片描述

    目前,Go仓库的最新commit中提交了pdqsort的相关功能描述:

    • 在所有基准测试中,pdqsort未表现出比以前的其它算法慢;
    • 在常见模式中,pdqsort通常更快(即在排序切片中快10倍)

    那么pdqsort是什么呢?

    pdqsort是Pattern-defeating quicksort的缩写,是一种新型的排序算法,将随机快速排序的快速平均情况与堆排序的最坏情况快速组合在一起,同时在具有特定模式的输入上实现了线性时间。 pdqsort是David Mussers introsort的扩展和改进。 在zlib许可下,所有代码都是免费的。

    目前在C++和Rust中均有实现,而据不少开发者实测发现,pdqsort较常用的introsort会有较大的性能提升。

    • C++ 实现: https://github.com/orlp/pdqsort
    • Rust 实现: https://docs.rs/pdqsort/latest/pdqsort/

    C++ 代码Demo:

    #include <algorithm>
    #include <functional>
    #include <array>
    #include <iostream>
    #include <string_view>
     
    int main()
    {
        std::array<int, 10> s = {5, 7, 4, 2, 8, 6, 1, 9, 0, 3};
     
        auto print = [&s](std::string_view const rem) {
            for (auto a : s) {
                std::cout << a << ' ';
            }
            std::cout << ": " << rem << '\n';
        };
     
        std::sort(s.begin(), s.end());
        print("sorted with the default operator<");
     
        std::sort(s.begin(), s.end(), std::greater<int>());
        print("sorted with the standard library compare function object");
     
        struct {
            bool operator()(int a, int b) const { return a < b; }
        } customLess;
        std::sort(s.begin(), s.end(), customLess);
        print("sorted with a custom function object");
     
        std::sort(s.begin(), s.end(), [](int a, int b) {
            return a > b;
        });
        print("sorted with a lambda expression");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    执行结果:

    0 1 2 3 4 5 6 7 8 9 : sorted with the default operator<
    9 8 7 6 5 4 3 2 1 0 : sorted with the standard library compare function object
    0 1 2 3 4 5 6 7 8 9 : sorted with a custom function object
    9 8 7 6 5 4 3 2 1 0 : sorted with a lambda expression

    Rust 代码Demo:

    extern crate pdqsort;
    
    let mut v = [-5i32, 4, 1, -3, 2];
    
    pdqsort::sort(&mut v);
    assert!(v == [-5, -3, 1, 2, 4]);
    
    pdqsort::sort_by(&mut v, |a, b| b.cmp(a));
    assert!(v == [4, 2, 1, -3, -5]);
    
    pdqsort::sort_by_key(&mut v, |k| k.abs());
    assert!(v == [1, 2, -3, 4, -5]);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    而就Go支持pdqsort算法,在HN上引起了不少的讨论,有人表示,我们研究排序算法这么久了,很惊讶我们还能想出能产生实际改进的优化方案。对此,你怎么看,快快上手体验一下吧。

    参考链接:

    • https://github.com/golang/go/commit/72e77a7f41bbf45d466119444307fd3ae996e257

    • https://news.ycombinator.com/item?id=31106157

    • https://en.cppreference.com/w/cpp/algorithm/sort

  • 相关阅读:
    Linux开源IM GGTalk 8.0发布,支持在统信UOS、银河麒麟上运行!
    【C++】类模板(二)类模板、函数模板、常量表达式与默认参数值、模板参数设计策略、成员模板函数
    python提取date的月份和天数
    线扫相机——机器视觉中无限制物体的检测(重要转载)
    ceph分布式存储
    教你如何使用API接口获取数据!
    【STM32】STM32H750VBT6 CubeMX USBFS-UVC设备实现,以及移植问题
    《网络安全笔记》第七章:注册表基础
    Ubuntu手机和电脑安装其他终端Terminal Emulator
    在外远程控制我的世界服务器 - MCSM面板【端口映射】
  • 原文地址:https://blog.csdn.net/csdnnews/article/details/124323267
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号