使用 Go 語言實現字串基數排序的程式


基數排序由於字串資料型別的固有結構而適用於對字串進行排序。在本文中,我們將編寫一個 Go 語言程式來實現對字串進行基數排序。我們從一個未排序的字串陣列開始,並演示如何應用基數排序對其進行排序。字串是字元陣列或字元組合。

語法

func make ([] type, size, capacity)

Go 中的 make 函式用於構建陣列/對映。它接收要生成的變數型別以及其大小和容量作為引數。

func range(variable)

range 函式遍歷任何資料型別。要使用它,首先鍵入 range 關鍵字,後跟要迭代的資料型別,迴圈將迭代直到變數的最後一個元素。

func len(v Type) int

len() 函式用於獲取任何引數的長度。它將要查詢長度的資料型別變數作為引數,並返回表示變數長度的整數值。

演算法

  • 從需要排序的字串陣列開始。

  • 查詢陣列中長度最長的字串。

  • 將基數排序演算法應用於每個字元位置,從右到左。

  • 在對所有字元位置進行排序後,字串陣列將按字典序排序。

  • 列印排序後的字串。

示例

在本例中,我們將編寫一個 Go 語言程式,使用基數排序演算法(將陣列元素與桶進行比較)來實現對字串的基數排序。這裡,計數排序函式用作子程式,用於根據當前數字位置的字元對字串進行排序。

package main

import (
   "fmt"
)

func countingSort(strs []string, index int) {
   n := len(strs)
   output := make([]string, n)
   count := make([]int, 256)

   for i := 0; i < n; i++ {
      char := getCharAtIndex(strs[i], index)
      count[char]++
   }

   for i := 1; i < 256; i++ {
      count[i] += count[i-1]
   }

   // Build the output array
   for i := n - 1; i >= 0; i-- {
      char := getCharAtIndex(strs[i], index)
      output[count[char]-1] = strs[i]
      count[char]--
   }

   for i := 0; i < n; i++ {
      strs[i] = output[i]
   }
}

func getCharAtIndex(str string, index int) int {
   if index < len(str) {
      return int(str[index])
   }
   return 0
}

func radixSort(strs []string) {
   maxLen := getMaxLen(strs)

   for i := maxLen - 1; i >= 0; i-- {
      countingSort(strs, i)
   }
}

func getMaxLen(strs []string) int {
   maxLen := 0
   for _, str := range strs {
      if len(str) > maxLen {
         maxLen = len(str)
      }
   }
   return maxLen
}

func main() {
   strs := []string{"banana", "apple", "cherry", "date", "grape", "kiwi", "mango", "orange"}
   radixSort(strs)
   fmt.Println("Sorted strings:", strs)
}

輸出

Sorted strings: [apple banana cherry date grape kiwi mango orange]

結論

在本文中,我們檢查瞭如何對字串執行基數排序。我們探討了使用計數排序作為子程式來實現此程式。

更新於: 2023年7月6日

193 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告