本文介绍: 切片是Go语言中引入的用于在大多数场合替代数组的语法元素。切片是长度可变的同类型元素序列,它不支持存储不同类型的元素。有序列的地方就有排序的需求。在各种排序算法都已经成熟的今天,我们完全可以针对特定元素类型的切片手写排序函数/方法,但多数情况下不推荐这么做,因为Go标准库内置了sort包可以很好地帮助我们实现原生类型元素切片以及自定义类型元素切片的排序任务。Go的sort包用来排序,二分查找等操作。
前言
一、sort包简介
二、sort包内排序原理实现
入口的 Sort 函数调用的 pdqsort 并不完全是快排。
pdqsort算法的改进在于对常见的情况做了特殊优化,其主要的思想是不断判定目前的序列情况,然后使用不同的方式和路径达到最优解;其实现就是对下面三种情况的不断循环:
为了更方便理解应用排序函数Sort,我们需要让被排序的切片类型实现 sort.Interface接口,以整型切片排序为例:
sort.Sort函数不保证排序是稳定的,要想使用稳定排序,需要使用sort.Stable
函数。(保证排序的稳定性,相等元素的相对次序不变)
三、sort包内置函数
1、sort.Ints(x []int)
2、sort.Slice(x any, less func(i, j int) bool)
3、sort.SearchInts(a []int, x int) int
4、sort.Search(n int, f func(int) bool) int
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。