📅  最后修改于: 2023-12-03 15:40:36.310000             🧑  作者: Mango
在 Golang 中检查给定的切片是否有序非常简单。我们可以使用内置函数 sort.Slice
和 sort.SliceStable
来进行排序,并使用 sort.IsSorted
函数来检查切片是否已排序。
sort.Slice
函数可以根据指定的 less 函数(用于定义元素间的比较规则)对切片中的元素进行排序。具体操作步骤如下:
sort
包。import "sort"
// 定义切片
slice := []int{5, 2, 6, 8, 1}
// 定义 less 函数
less := func(i, j int) bool {
return slice[i] < slice[j]
}
sort.Slice
函数对切片进行排序。sort.Slice(slice, less)
if sort.IsSorted(sort.IntSlice(slice)) {
fmt.Println("切片已排序")
} else {
fmt.Println("切片未排序")
}
如果切片已排序,则输出 切片已排序
,否则输出 切片未排序
。
sort.SliceStable
函数与 sort.Slice
函数类似,但在处理相等的元素时更稳定。如果有多个元素相等,它们在排序后仍将按它们在原始切片中的顺序呈现。具体操作步骤如下:
定义切片和 less 函数。代码同上。
使用 sort.SliceStable
函数对切片进行排序。
sort.SliceStable(slice, less)
package main
import (
"fmt"
"sort"
)
func main() {
// 定义切片
slice := []int{5, 2, 6, 8, 1}
// 定义 less 函数
less := func(i, j int) bool {
return slice[i] < slice[j]
}
// 使用 sort.Slice 函数对切片进行排序
sort.Slice(slice, less)
// 检查切片是否已排序
if sort.IsSorted(sort.IntSlice(slice)) {
fmt.Println("切片已排序")
} else {
fmt.Println("切片未排序")
}
// 使用 sort.SliceStable 函数对切片进行排序
sort.SliceStable(slice, less)
// 检查切片是否已排序
if sort.IsSorted(sort.IntSlice(slice)) {
fmt.Println("切片已排序")
} else {
fmt.Println("切片未排序")
}
}
通过使用 sort 包中的函数,我们可以轻松地检查给定的切片是否已排序。如果切片未排序,则可以使用 sort 包中的函数对其进行排序。