溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

GO常用包學(xué)習(xí)筆記 sort:排序相關(guān)(三)

發(fā)布時(shí)間:2020-07-20 01:14:48 來(lái)源:網(wǎng)絡(luò) 閱讀:1190 作者:duanbowen 欄目:開(kāi)發(fā)技術(shù)

Package sort

對(duì)數(shù)組切片進(jìn)行排序操作;判斷是否已正序排序;使用二分法從切片中查找一個(gè)元素(要先正序排序)。

 

 對(duì)基本類(lèi)型的切片排序

 []float64[]int,[]string的排序(遞增),判斷可以直接使用以下六個(gè)方法

func Float64s(a []float64)

func Ints(a []int)

func Strings(a []string)

func Float64sAreSorted(a []float64) bool

func IntsAreSorted(a []int) bool

func StringsAreSorted(a []string) bool

以上6個(gè)方法都是間接通過(guò)排序接口"Interface"進(jìn)行排序的

 

通過(guò)實(shí)現(xiàn)Interface接口對(duì)自定義類(lèi)型的數(shù)組切片進(jìn)行排序

需實(shí)現(xiàn)接口的三個(gè)方法

  Len() int //長(zhǎng)度

  Less(i, j int) bool //比較

  Swap(i, j int)  //交換

  

 滿足接口的集合就可以使用以下四個(gè)方法

 

 

func Sort(data Interface)  //排序 不保證相等的元素排序前后的順序

func IsSorted(data Interface) bool //判斷是否正序

func Stable(data Interface) //排序 保證相等的元素排序前后的順序

func Reverse(data Interface) Interface //(排序前)修改排序接口的比大小方法

基本類(lèi)型的排序就是通過(guò)如下三個(gè)實(shí)現(xiàn)了Interface接口的對(duì)象來(lái)實(shí)現(xiàn)的  

 type Float64Slice    //type Float64Slice []float64

    func (p Float64Slice) Len() int

    func (p Float64Slice) Less(i, j int) bool

    func (p Float64Slice) Search(x float64) int

    func (p Float64Slice) Sort()

    func (p Float64Slice) Swap(i, j int)

type IntSlice

    func (p IntSlice) Len() int

    func (p IntSlice) Less(i, j int) bool

    func (p IntSlice) Search(x int) int

    func (p IntSlice) Sort()

    func (p IntSlice) Swap(i, j int)

type StringSlice

    func (p StringSlice) Len() int

    func (p StringSlice) Less(i, j int) bool

    func (p StringSlice) Search(x string) int

    func (p StringSlice) Sort()

    func (p StringSlice) Swap(i, j int)

 

 上面幾個(gè)Search方法(二分法,要先遞增排序才能用)通過(guò)下面三個(gè)方法實(shí)現(xiàn) 

func SearchFloat64s(a []float64, x float64) int

func SearchInts(a []int, x int) int

func SearchStrings(a []string, x string) int

 而這三個(gè)方法調(diào)用了Search方法

func Search(n int, f func(int) bool) int  //二分法

 

 

Go1.8新增的排序方法

func Slice(slice interface{}, less func(i, j int) bool)  //排序 不保證相同的元素的次序

func SliceStable(slice interface{}, less func(i, j int) bool)//排序 保證排序后相同的元素的先后順序不變

func SliceIsSorted(slice interface{}, less func(i, j int) bool) bool //是否為正序排列

入?yún)?/span>slice必須是一個(gè)數(shù)組切片,否則發(fā)生panic

 

 

 

 

 

 

 

 


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI