golang的int64排序_golang sort —— 排序算法

该包实现了四种基本排序算法:插入排序、归并排序、堆排序和快速排序。 但是这四种排序方法是不公开的,它们只被用于sort包内部使用。所以在对数据集合排序时不必考虑应当选择哪一种排序方法,只要实现了sort.Interface定义的三个方法:获取数据集合长度的Len()方法、比较两个元素大小的Less()方法和交换两个元素位置的Swap()方法,就可以顺利对数据集合进行排序。sort包会根据实际数据自动选择高效的排序算法。 除此之外,为了方便对常用数据类型的操作,sort包提供了对[]int切片、[]float64切片和[]string切片完整支持,主要包括:

对基本数据类型切片的排序支持

基本数据元素查找

判断基本数据类型切片是否已经排好序

对排好序的数据集合逆序

3.1.1 数据集合排序

前面已经提到过,对数据集合(包括自定义数据类型的集合)排序需要实现sort.Interface接口的三个方法,我们看以下该接口的定义:

type Interface interface {

// 获取数据集合元素个数

Len() int

// 如果i索引的数据小于j所以的数据,返回true,不会调用

// 下面的Swap(),即数据升序排序。

Less(i, j int) bool

// 交换i和j索引的两个元素的位置

Swap(i, j int)

}

数据集合实现了这三个方法后,即可调用该包的Sort()方法进行排序。 Sort()方法定义如下:

`func Sort(data Interface)`

Sort()方法惟一的参数就是待排序的数据集合。

该包还提供了一个方法可以判断数据集合是否已经排好顺序,该方法的内部实现依赖于我们自己实现的Len()和Less()方法:

func IsSorted(data Interface) bool {

n := data.Len()

for i := n - 1; i > 0; i-- {

if data.Less(i, i-1) {

return false

}

}

return true

}

下面是一个使用sort包对学生成绩排序的示例:

package main

import (

"fmt"

"sort"

)

//学生成绩结构体

type StuScore struct {

//姓名

name string

//成绩

score int

}

type StuScores []StuScore

//Len()

func (s StuScores) Len() int {

return len(s)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值