会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 Go语言将引入新型排序算法:Pdqsort!

Go语言将引入新型排序算法:Pdqsort

时间:2025-11-05 02:14:17 来源:益强数据堂 作者:数据库 阅读:793次

哈喽,将引大家好,入新我是型排序算asong。最近在逛Go仓库时看到了一个commit是将引关于排序算法的,即pdqsort排序算法,入新Go计划将在下一个版本中支持该排序算法,型排序算下面我们就具体来看一看这个事情;

commit地址:https://github.com/golang/go/commit/72e77a7f41bbf45d466119444307fd3ae996e257

该commit中介绍了pqdsort的将引测试结果:

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

pdqsort实质为一种混合排序算法,在不同情况下切换到不同的型排序算排序机制,该实现灵感来自C++和RUST的将引实现,是入新对C++标准库算法introsort的一种改进,其理想情况下的WordPress模板型排序算时间复杂度为 O(n),最坏情况下的将引时间复杂度为 O(n* logn),不需要额外的入新空间。

pdqsort算法的型排序算改进在于对常见的情况做了特殊优化,其主要的思想是不断判定目前的序列情况,然后使用不同的方式和路径达到最优解;如果大家想看一下该算法的具体实现,可以查看https://github.com/zhangyunhao116/pdqsort中的实践,其实现就是对下面三种情况的不断循环:

短序列情况:对于长度在 [0, MAX_INSERTION] 的免费信息发布网输入,使用 insertion sort (插入排序)来进行排序后直接返回,这里的 MAX_INSERTION 我们在 Go 语言下的性能测试,选定为 24。最坏情况,如果发现改进的 quicksort 效果不佳(limit == 0),则后续排序都使用 heap sort 来保证最坏情况时间复杂度为 O(n*logn)。正常情况,对于其他输入,使用改进的 quicksort 来排序。

具体的源代码实现可以自行查看,本文就不过多分析了,下面我们来看一下pdqsort的demo:

import (

"fmt"

"github.com/zhangyunhao116/pdqsort"

)

func main() {

x := []int{3, 1, 2, 4, 5, 9, 8, 7}

pdqsort.Slice(x)

fmt.Printf("sort_result = %v\n", x)

search_result := pdqsort.Search(x, 4)

fmt.Printf("search_result = %v\n", search_result)

is_sort := pdqsort.SliceIsSorted(x)

fmt.Printf("is_sort = %v\n", is_sort)

}

运行结果:

sort_result = [1 2 3 4 5 7 8 9]

search_result = 3

is_sort = true

对于此次排序算法优化你们有什么想法?快快上手体验一下吧~。

参考链接:

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

https://www.easemob.com/news/8361

https://github.com/zhangyunhao116/pdqsort

https://arxiv.org/pdf/2106.05123.pdf

IT技术网

(责任编辑:系统运维)

推荐内容
  • 电脑声音服务错误1079的解决方法(探索Windows电脑声音服务错误1079的原因和解决方案)
  • 后端程序员对于 Docker 要掌握多少才行?阿粉的答案是...
  • 百度段润尧:有近70%的大型企业希望能布局量子计算
  • RTC 场景下的屏幕共享优化实践
  • 操作系统安装教程(一步步教你安装操作系统,让电脑焕发新生)
  • 五种最常见的移动应用程序测试错误方式,如何规避?