用于数组旋转的 Golang 程序

go programmingserver side programmingprogramming更新于 2025/5/12 17:52:17

简介

在本教程中,我们将了解如何编写一个 Go 语言程序来旋转数组。我们将为此编写两个程序。一个用于将数组向左旋转,另一个用于将其向右旋转。

将数组向左旋转的 Golang 程序

以下代码说明了如何使用用户定义的函数将数组向左旋转。

上述程序的算法

步骤 1 - 导入 fmt 包,该包允许我们在屏幕上打印任何内容。

步骤 2 - 创建一个名为 rotateLeft() 的函数,该函数在旋转后返回最终数组。

步骤 3 - 此函数使用 for 循环遍历数组并在每次迭代中调用 rotateLeftByOne() 函数。

步骤 4 - 此函数将数组作为参数并使用 for 循环遍历数组变量。

步骤 5 - 在每次迭代中,我们都会放置下一个值恢复到先前的位置并恢复第一个元素。

步骤 6 - 现在调用 main() 函数。

步骤 7 - 初始化一个整数数组并为其分配值。

步骤 8 - 在屏幕上打印数组并调用 rotateLeft() 函数,方法是将数组和元素应移动的次数作为参数传递给该函数。

步骤 9 - 使用 fmt.Println() 函数在屏幕上打印最终数组。

示例

package main
import "fmt"
func rotateLeft(arr []int, count int) {
   for i := 0; i < count; i++ {
      rotateLeftByOne(arr)
   }
}
func rotateLeftByOne(arr []int) {
   var i int = 0
   var temp int = arr[0]
   for ; i < len(arr)-1; i++ {
      arr[i] = arr[i+1]
   }
   arr[i] = temp
}
func main() {
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
    fmt.Println("输入的数组为:", arr)
    rotateLeft(arr, 7)
    fmt.Println("向左旋转7位得到的数组为:", arr)
}

输出

输入的数组为:[1 2 3 4 5 6 7 8]
向左旋转7位得到的数组为:[8 1 2 3 4 5 6 7]

Golang 程序将数组向右旋转

以下代码演示了一个 Go 语言程序,用于将数组元素向右旋转任意次数。

上述算法程序

步骤 1 − 导入 fmt 包,该包允许我们在屏幕上打印任何内容。

步骤 2 − 定义一个名为 rotateRight() 的函数,该函数将向右旋转数组任意次数。

步骤 3 − 它使用 for 循环遍历数组并将倒数第二个元素存储在变量中。

步骤 4 − 然后,它再使用一个 for 循环将元素向右移动到数组的长度。

步骤 5 − 启动 main() 函数。这是程序执行开始的起点。

步骤 6 − 初始化一个整数数组并为其分配值。将此数组打印在屏幕上。

步骤 7 − 现在通过将数组和应发生移位的次数作为参数传递给 rotateRight() 函数来调用它。

步骤 8 − 使用 fmt.Println() 函数在屏幕上打印最终数组。

示例

package main
import "fmt"
func rotateRight(arr []int, count int) {
   for i := 0; i < count; i++ {
      var j, last int
      length := len(arr)
      last = arr[length-1]
      for j = length - 1; j > 0; j-- {
         arr[j] = arr[j-1]
      }
      arr[0] = last
   }
}
func main() {
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
    
    // 使用 fmt.Println() 函数将数组打印到屏幕上
    fmt.Println("输入的数组是:", arr)
    rotateRight(arr, 7)
    fmt.Println("向右旋转 7 个位置得到的数组是:", arr)
}

输出

输入的数组是:[1 2 3 4 5 6 7 8]
向右旋转 7 个位置得到的数组是:[2 3 4 5 6 7 8 1]

使用预定义函数将数组向右旋转

现在让我们看另一个程序,使用该程序我们可以将数组变量向右旋转,但不使用循环和条件。

语法

func copy(dst, str[] type) int

Go 语言中的 copy 函数用于将一个源数组的值复制到目标数组,并返回复制的元素数作为结果。它将两个数组作为参数。

func make ([] type, size, capacity)

Go 语言中的 make 函数用于创建一个数组/映射,它接受要创建的变量的类型、其大小和容量作为参数

示例

package main
import "fmt"
func rotateRight(nums []int, k int) {
   k %= len(nums)
   new_array := make([]int, len(nums))
   copy(new_array[:k], nums[len(nums)-k:])
   copy(new_array[k:], nums[:len(nums)-k])
   copy(nums, new_array)
}
func main() {
    arr := []int{1, 2, 3, 4, 5, 6, 7, 8}
    fmt.Println("输入的数组为:", arr)
    rotateRight(arr, 7)
    fmt.Println("向右旋转7位得到的数组为:", arr)
}

输出

输入的数组为:[1 2 3 4 5 6 7 8]
向右旋转7位得到的数组为:[2 3 4 5 6 7 8 1]

总结

我们成功编写并执行了一个go语言程序,对数组元素进行旋转,并附上示例。


相关文章