Go 排序

Posted liuhmmjj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go 排序相关的知识,希望对你有一定的参考价值。

示例代码:

import (
	"fmt"
	"sort"
)

type Person struct
	name string
	age int8



type PersonSortList []Person

func (p PersonSortList) Len() int 
	return len(p)



func (p PersonSortList) Swap(i, j int) 
	p[i],p[j] = p[j],p[i]


func (p PersonSortList)Less(i,j int) bool
	return p[i].age < p[j].age


func (p Person)Dream()int
	fmt.Printf("%s的梦想是学好Go语言",p.name)
	return 0


func NewPerson(name string,age int8)  Person
	return Person
		name:name,
		age:age,
	


func (p *Person) SetAge(newAge int8)
	p.age = newAge


func main()
	people := make([]Person , 0)

	var pp1  = NewPerson("Yang",29)
	people = append(people, pp1)
	var pp2  = NewPerson("Tong",27)
	people = append(people, pp2)
	var pp3  = NewPerson("Wen",23)
	people = append(people, pp3)
	var pp4  = NewPerson("Liu",31)
	people = append(people, pp4)
	//使用自定义比较器排序
	sort.SliceStable(people, func(i, j int) bool 
		return people[i].age < people[j].age
	)
	fmt.Println(people)
	fmt.Println("***********************")
	//排序任意数据结构
	//使用sort.Sort或者sort.Stable函数
	//他们可以排序实现了sort.Interface接口的任意类型
	//一个内置的排序算法需要知道三个东西:序列的长度,表示两个元素比较的结果,一种交换两个元素的方式
	c:=PersonSortList(people)
	sort.Sort(PersonSortList(people))
	fmt.Println(people)
	fmt.Println("*************************")
	fmt.Println(c)
	fmt.Println("*************************")

	s := []int4, 2, 3, 1
	//对于[]int, []float, []string这种元素类型是基础类型的切片使用sort包提供的几个函数进行排序
	sort.Ints(s)
	fmt.Println(s) // 输出[1 2 3 4]


结果:

[Wen 23 Tong 27 Yang 29 Liu 31]
***********************
[Wen 23 Tong 27 Yang 29 Liu 31]
*************************
[Wen 23 Tong 27 Yang 29 Liu 31]
*************************
[1 2 3 4]

以上是关于Go 排序的主要内容,如果未能解决你的问题,请参考以下文章

Go-插入排序

go语言的排序结构体排序

Go排序

go语言的排序和搜索

GO-冒泡排序算法

打造 Go 语言最快的排序算法