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 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告