檢查給定的切片在 Golang 中是否已排序


在 Golang 中,瞭解切片是否已排序非常重要,尤其是在使用需要排序資料的演算法時。在本文中,我們將探討檢查給定切片是否已排序的各種方法。

使用迴圈檢查切片是否已排序

檢查切片是否已排序的一種方法是使用迴圈比較切片中相鄰的元素。如果元素按升序排列,則切片已排序。以下是一個示例程式碼 -

示例

package main

import "fmt"

func isSorted(s []int) bool {
   n := len(s)
   for i := 1; i < n; i++ {
      if s[i] < s[i-1] {
         return false
      }
   }
   return true
}

func main() {
   s1 := []int{1, 2, 3, 4, 5}
   s2 := []int{1, 3, 2, 4, 5}
   fmt.Println(isSorted(s1)) // true
   fmt.Println(isSorted(s2)) // false
}

輸出

true
false

在這個例子中,我們定義了 isSorted 函式,它接受一個整數切片並返回一個布林結果,指示切片是否已排序。為了比較切片中的相鄰元素,該函式使用了一個迴圈。如果確定某個元素小於其前面的元素,則該函式返回 false。否則,它返回 true。

使用 sort.SliceIsSorted 函式

Golang 提供了一個名為 sort.SliceIsSorted 的內建函式,可用於檢查切片是否已排序。此函式接受切片和比較函式作為引數,並返回一個布林值,指示切片是否已排序。以下是一個示例程式碼 -

示例

package main

import (
   "fmt"
   "sort"
)

func main() {
   s1 := []int{1, 2, 3, 4, 5}
   s2 := []int{1, 3, 2, 4, 5}

   fmt.Println(sort.SliceIsSorted(s1, func(i, j int) bool {
      return s1[i] < s1[j]
   })) // true

   fmt.Println(sort.SliceIsSorted(s2, func(i, j int) bool {
      return s2[i] < s2[j]
   })) // false
}

輸出

true
false

在這個例子中,我們使用 sort.SliceIsSorted 函式來檢查兩個切片是否已排序。該函式接受一個切片和一個比較函式作為引數。如果索引 i 處的元素小於索引 j 處的元素,則比較函式返回 true。如果切片已排序,則該函式返回 true,否則返回 false。

使用 sort.IntsAreSorted 函式

如果您正在使用整數切片,則可以使用 sort.IntsAreSorted 函式來檢查切片是否已排序。此函式接受整數切片作為引數,並返回一個布林值,指示切片是否已排序。以下是一個示例程式碼 -

示例

package main

import (
   "fmt"
   "sort"
)

func main() {
   s1 := []int{1, 2, 3, 4, 5}
   s2 := []int{1, 3, 2, 4, 5}

   fmt.Println(sort.IntsAreSorted(s1)) // true
   fmt.Println(sort.IntsAreSorted(s2)) // false
}

輸出

true
false

在這個例子中,我們使用 sort.IntsAreSorted 函式來檢查兩個切片是否已排序。如果切片按升序排序,則該函式返回 true,否則返回 false。

結論

檢查切片是否已排序是 Golang 中一項重要的任務。在本文中,我們探討了檢查給定切片是否已排序的各種方法。我們使用迴圈比較切片中的相鄰元素,sort.SliceIsSorted 函式和 sort.IntsAreSorted 函式來檢查切片是否已排序。透過使用這些方法,我們可以輕鬆地檢查切片是否已排序並相應地採取必要的措施。

更新於: 2023年4月7日

460 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始
廣告

© . All rights reserved.