📜  检查给定的切片是否在 Golang 中排序(1)

📅  最后修改于: 2023-12-03 15:40:36.310000             🧑  作者: Mango

检查给定的切片是否在 Golang 中排序

在 Golang 中检查给定的切片是否有序非常简单。我们可以使用内置函数 sort.Slicesort.SliceStable 来进行排序,并使用 sort.IsSorted 函数来检查切片是否已排序。

使用 sort.Slice 函数

sort.Slice 函数可以根据指定的 less 函数(用于定义元素间的比较规则)对切片中的元素进行排序。具体操作步骤如下:

  1. 导入 sort 包。
import "sort"
  1. 定义切片和 less 函数。
// 定义切片
slice := []int{5, 2, 6, 8, 1}

// 定义 less 函数
less := func(i, j int) bool {
    return slice[i] < slice[j]
}
  1. 使用 sort.Slice 函数对切片进行排序。
sort.Slice(slice, less)
  1. 检查切片是否已排序。
if sort.IsSorted(sort.IntSlice(slice)) {
    fmt.Println("切片已排序")
} else {
    fmt.Println("切片未排序")
}

如果切片已排序,则输出 切片已排序,否则输出 切片未排序

使用 sort.SliceStable 函数

sort.SliceStable 函数与 sort.Slice 函数类似,但在处理相等的元素时更稳定。如果有多个元素相等,它们在排序后仍将按它们在原始切片中的顺序呈现。具体操作步骤如下:

  1. 定义切片和 less 函数。代码同上。

  2. 使用 sort.SliceStable 函数对切片进行排序。

sort.SliceStable(slice, less)
  1. 检查切片是否已排序。代码同上。
完整示例代码
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 包中的函数对其进行排序。