Go 語言程式實現桶排序


在這篇文章中,我們將學習開發一個 Go 語言程式,透過使用自定義排序演算法來實現桶排序。在桶排序中,我們將未排序的陣列排序到不同的桶中,每個桶包含一個較寬範圍的元素。然後,使用不同的排序演算法(例如插入排序或快速排序)對每個桶中的元素進行排序。最後,將排序後的桶合併在一起。

演算法

  • 步驟 1 − 首先,我們需要匯入 fmt 包。然後建立一個名為 bucketSort() 的函式,該函式接受要排序的陣列作為引數並返回排序後的陣列。

  • 步驟 2 − 初始化一個空桶,並在其中儲存陣列的最大值。

  • 步驟 3 − 透過將當前元素除以輸入陣列的長度並乘以桶的數量來計算當前元素所屬桶的索引。

  • 步驟 4 − 將當前元素追加到計算出的索引處的桶中。

  • 步驟 5 − 現在使用 for 迴圈遍歷每個桶,並使用任何選擇的排序演算法對每個桶進行排序。在本例中,我們使用插入排序演算法。

  • 步驟 6 − 現在,按正確的順序排列所有排序後的桶,從第一個桶到最後一個桶,並返回排序後的桶。

  • 步驟 7 − 啟動 main() 函式。在 main() 中初始化要排序的陣列。呼叫 bucketSort() 函式並將要排序的陣列作為引數傳遞給它。

  • 步驟 8 − 將排序後的陣列儲存在一個變數中,並使用 fmt.Println() 函式將其列印到螢幕上。

示例 1

在本例中,我們將編寫一個 Go 語言程式,使用簡單的桶排序對陣列進行排序。

此方法透過將元素分成固定數量的桶來工作,每個桶包含一個值的範圍。

package main

import (
   "fmt"
)

func bucketSort(arr []int) []int {
   maxVal := 0
   for _, val := range arr {
      if val > maxVal {
         maxVal = val
      }
   }

   buckets := make([][]int, maxVal+1)
   for i := range buckets {
      buckets[i] = make([]int, 0)
   }

   for _, val := range arr {
      buckets[val] = append(buckets[val], val)
   }

   result := make([]int, 0)
   for _, bucket := range buckets {
      result = append(result, bucket...)
   }

   return result
}

func main() {
   arr := []int{67, 32, 12, 54, 43, 57}
   fmt.Println("The given unsorted array is:", arr)
   sortedArr := bucketSort(arr)
   fmt.Println("The obtained sorted array is:", sortedArr)
}

輸出

The given unsorted array is: [67 32 12 54 43 57]
The obtained sorted array is: [12 32 43 54 57 67]

示例 2

在本例中,我們將編寫一個 Go 語言程式來實現桶排序以及自定義排序演算法。

package main

import (
   "fmt"
)

func bucketSortCustom(arr []float64) []float64 {
   buckets := make([][]float64, len(arr))
   for i := range buckets {
      buckets[i] = make([]float64, 0)
   }

   for _, val := range arr {
      index := int(val * float64(len(arr)))
      buckets[index] = append(buckets[index], val)
   }

   for _, bucket := range buckets {
      for i := 1; i < len(bucket); i++ {
         j := i
         for j > 0 && bucket[j-1] > bucket[j] {
            bucket[j-1], bucket[j] = bucket[j], bucket[j-1]
            j--
         }
      }
   }

   result := make([]float64, 0)
   for _, bucket := range buckets {
      result = append(result, bucket...)
   }
   return result
}

func main() {
   arr := []float64{0.42, 0.32, 0.67, 0.89, 0.12, 0.57}
   fmt.Println("Original array:", arr)
   sortedArr := bucketSortCustom(arr)
   fmt.Println("Sorted array:", sortedArr)
}

輸出

Original array: [0.42 0.32 0.67 0.89 0.12 0.57]
Sorted array: [0.12 0.32 0.42 0.57 0.67 0.89]

結論

在這篇文章中,我們已經成功地編譯並執行了一個 Go 語言程式來實現桶排序演算法。這裡我們使用了兩個程式。在第一個程式中,我們使用簡單的桶排序,而在另一個程式中,我們使用帶自定義排序的桶排序來實現我們的結果。

更新於: 2023年4月5日

336 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.