Go1.19 排序算法设计实践 经典排序算法对比

这篇具有很好参考价值的文章主要介绍了Go1.19 排序算法设计实践 经典排序算法对比。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

详解经典排序算法

01 为什么要学习数据结构与算法

抖音直播排行榜功能 案例

规则:某个时间段内,直播间礼物数TOP10房间获得奖励,需要在每个房间展示排行榜解决方案

•礼物数量存储在Redis-zset中,使用skiplist使得元素整体有序
•使用Redis集群,避免单机压力过大,使用主从算法、分片算法
•保证集群原信息的稳定,使用一致性算法
•后端使用缓存算法(LRU)降低Redis压力,展示房间排行榜数据结构和算法几乎存在于程序开发中的所有地方

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

讲师 张云浩 这个大佬的 团队提出的 算法 被官方采纳 应用于1.19

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

02 经典排序算法

Insertion Sort 插入排序

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

时间复杂度:

Best: 有序情况

Avg: 是翻转的对数log决定的,大家也可以看看详细解析

algorithm - Why is insertion sort Θ(n^2) in the average case? - Stack Overflow

Worst: 逆序

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Quick 快速排序

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Best: 每一次选择的轴点恰好是中位数,这样每次分割都能分割成 两个几乎相等的数组

Worst: 每次只将一个元素放到最终位置,例如选择的轴点都是已知序列的最小元素

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Heap 堆排序

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

经典算法理论印象

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

实际场景

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

random

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Selected

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

从零开始打造 pdqsort

pdqsoer—简介

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

不稳定:可能会对值相等的元素调整位置

pdqsort- version1

结合三种排序方法的优点

•对于短序列(小于一定长度)我们使用插入排序
•其他情况,使用快速排序来保证整体性能
•当快速排序表现不佳时,使用堆排序来保证最坏情况下时间复杂度仍然为O(n*logn)

Q&A
1.短序列的具体长度是多少呢?

12~32,在不同语言和场景中会有不同,在泛型版本根据测试选定24

2.如何得知快速排序表现不佳,以及何时切换到堆排序?

当最终pivot的位置离序列两端很接近时(距离小于length/8)判定其表现不佳,当这种情况的次数达到limit(即bits.Len(length))时,切换到堆排序

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

pdqsort- version2

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

pdqsort—final version(Go1.19 default)

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

高性能的排序算法是如何设计的?

根据不同情况选择不同策略,取长补短

生产环境中使用的的排序算法和课本上的排序算法有什么区别?

理论算法注重理论性能,例如时间、空间复杂度等。生产环境中的算法需要面对不同的实践场景,更加注重实践性能

Go语言(<=1.18)的排序算法是快速排序么?

实际一直是混合排序算法,主体是快速排序。Go<=1.18时的算法也是基于快速排序,和pdqsort的区别在于fallback时机、pivot选择策略、是否有针对不同pattern优化

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构

非常感谢您阅读到这里,创作不易!如果这篇文章对您有帮助,希望能留下您的点赞👍 关注💖 收藏 💕评论💬感谢支持!!!

听说三连的人都能 上岸 进入大厂 年入百w 

Go1.19 排序算法设计实践 经典排序算法对比,字节跳动后端Go语言,算法,java,数据结构文章来源地址https://www.toymoban.com/news/detail-668621.html

到了这里,关于Go1.19 排序算法设计实践 经典排序算法对比的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go1.20环境安装以及beego框架配置

    打开网址下载安装包 选择对应安装包来下载安装(个人是windows,下载的1.20.3版本) 默认情况下会安装在C盘,但是我安装在了D盘目录 根据安装提示一步步next,直至完成  go get 在1.18版本之后就弃掉了,换成了install 配置自己的work目录,假如是GOPATH=**/WORKS/ beego和bee的安装配置

    2023年04月24日
    浏览(32)
  • MacOS goland go1.21 debug问题

    brew install dlv 安装之后在终端会显示所在目录 类似/usr/local/Cellar/delve/1.21.0/bin 在文件系统中找到goland 右击选择show package contents - Contents - plugins - go 尝试替换 其中对应系统 的 dlv 结果还是不行 然后打开应用goland Help → Edit Custom Properties 增加以下代码: dlv.path=/usr/local/Cellar/del

    2024年02月11日
    浏览(28)
  • 【八大经典排序算法】快速排序

    说到快速排序就不得不提到它的创始人 hoare了。在20世纪50年代,计算机科学家们开始研究如何对数据进行排序,以提高计算机程序的效率。当时,常用的排序算法包括冒泡排序、插入排序和选择排序等。 然而,这些算法的效率都相对较低,特别是在处理大量数据时。于是,

    2024年02月07日
    浏览(33)
  • 【数据结构与算法】十大经典排序算法-希尔排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 希尔排序是一种插入排序的改进版本,旨在解决插入排序在处理大规模数据时的效率问题。通过将数组分为多个子序列并对

    2024年02月12日
    浏览(54)
  • 【数据结构与算法】十大经典排序算法-快速排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 快速排序(Quick Sort)是一种高效的排序算法,是对冒泡排序的优化。它采用分治法(Divide and Conquer)的思想,将待排序序列

    2024年02月13日
    浏览(46)
  • 【数据结构与算法】十大经典排序算法-冒泡排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌴 掘金 :HelloCode 🌞 知乎 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻元素的位置来将最大(或最小)的元素逐步“冒泡”到

    2024年02月14日
    浏览(51)
  • 【数据结构与算法】十大经典排序算法-插入排序

    🌟 个人博客: www.hellocode.top 🏰 Java知识导航: Java-Navigate 🔥 CSDN: HelloCode. 🌞 知乎 :HelloCode 🌴 掘金 :HelloCode ⚡如有问题,欢迎指正,一起学习~~ 插入排序(Insertion Sort)是一种简单直观的排序算法,其基本思想是将一个记录插入到已排好序的有序序列中,直到所有记录

    2024年02月13日
    浏览(59)
  • 【算法】经典的八大排序算法

    点击链接 可视化排序 动态演示各个排序算法来加深理解,大致如下 原理 冒泡排序(Bubble Sort)是一种简单的排序算法,它通过多次比较和交换相邻元素的方式,将最大(或最小)的元素逐步冒泡到数组的一端。每一轮冒泡将会将未排序部分中最大(或最小)的元素“浮”

    2024年02月11日
    浏览(28)
  • 十大经典排序算法----堆排序(超详细)

    目录 1. 堆排序的基础知识 1.1 大顶堆小顶堆  1.2 向下调整算法 1.3 物理结构与逻辑结构的关系 2. 堆排序详解 2.1 堆排序整体思路  2.2 思路详解 2.2.1 建堆 2.2.2 大堆or小堆 2.2.3 输出数据 3. 时间复杂度分析 4. 完整代码  5. 彩蛋 堆排序(Heap Sort)就是对直接选择排序的

    2024年02月03日
    浏览(22)
  • 【字节跳动青训营】后端笔记整理-2 | Go实践记录:猜谜游戏,在线词典,Socks5代理服务器

    **本人是第六届字节跳动青训营(后端组)的成员。本文由博主本人整理自该营的日常学习实践,首发于稀土掘金:🔗Go实践记录:猜谜游戏,在线词典,Socks5代理服务器 | 青训营 我的go开发环境: *本地IDE:GoLand 2023.1.2 *go:1.20.6 猜数字游戏也算是入门一门编程语言必写的程

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包