Go语言程序:按列排序二维数组


什么是 Go 语言中的二维数组?

在 Go 编程语言中,二维数组是一个数组的数组,其中外部数组的每个元素本身都是一个简单的数组。声明一个大小为 2 X 3 的二维数组的代码可以通过编写 var array [2][3] 来完成。需要注意的是,二维数组具有固定的大小,并且一旦创建,其大小就无法更改。如果您需要一个动态的二维数组,可以使用切片的切片。

以下是如何按列排序二维数组的示例:

输入

3	2	1	
6	4	5	
8	9	7

输出

1	2	3	
4	5	6	
7	8	9

方法 1:使用 For 循环

在此方法中,我们将使用 Go 语言程序中的“for”循环,这将帮助我们按列排序二维数组。

算法

  • 步骤 1 − 首先,我们需要导入 fmt 包。

  • 步骤 2 − 然后,启动 main() 函数。在 main() 函数内部,初始化一个包含要排序的元素的二维整数数组。使用 for 循环和 fmt.Println() 函数在屏幕上打印数组。

  • 步骤 3 − 要排序元素,请在另一个循环内使用三个 for 循环。前两个 for 循环用于遍历二维数组,而第三个 for 循环用于选择循环的特定元素并将其放置在相应的位置。

  • 步骤 4 − 如果数组的当前元素大于下一个元素,则我们需要交换元素的位置,否则我们必须继续循环。

  • 步骤 5 − 一旦遍历了循环的每个元素,我们收到的结果数组将按升序排序。现在,我们可以使用 fmt.Println() 函数在屏幕上打印这些数组的元素。

示例

以下是一个使用“for”循环按列排序二维数组的 Go 语言程序

package main
import (
   "fmt"
)

func main() {
   // 2D array to sort
   arr := [][]int{{3, 2, 1}, {6, 4, 5}, {8, 9, 7}}
   var rows int = len(arr)
   var cols int = len(arr[0])
   fmt.Println("The given 2D array to be sorted is:")
   for i := 0; i < rows; i++ {
      for j := 0; j < cols; j++ {
         fmt.Print(arr[i][j], "\t")
      }
      fmt.Println()
   }
   // sorting the 2D array
   for i := 0; i < len(arr); i++ {
      for j := 0; j < len(arr[i])-1; j++ {
         for k := 0; k < len(arr[i])-j-1; k++ {
            if arr[i][k] > arr[i][k+1] {
               temp := arr[i][k]
               arr[i][k] = arr[i][k+1]
               arr[i][k+1] = temp
            }
         }
      }
   }
   fmt.Println()
   // printing the sorted 2D array
   fmt.Println("The final array obtained after sorting the 2D array is:")
   for i := 0; i < rows; i++ {
      for j := 0; j < cols; j++ {
         fmt.Print(arr[i][j], "\t")
      }
      fmt.Println()
   }
}

输出

The given 2D array to be sorted is:
3	2	1	
6	4	5	
8	9	7	

The final array obtained after sorting the 2D array is:
1	2	3	
4	5	6	
7	8	9

方法 2:使用内部函数

在此方法中,我们将使用内部函数来排序二维数组的元素。

语法

func len(v Type) int

len() 函数用于获取任何参数的长度。它将要查找长度的数据类型变量作为参数,并返回一个整数,该整数是变量的长度。

func Ints(slc []int)

Ints() 函数位于 sorts 包中,用于对特定整数数组进行排序。该函数接受要排序的切片作为参数,并在对切片的元素进行排序后返回最终的切片。

type Slice []int

Slice() 函数位于 sort 包中。此函数用于将接口的方法附加到 int 数组,以便可以按升序对其进行排序。

算法

  • 步骤 1 − 首先,我们需要导入 fmt 包。

  • 步骤 2 − 然后,启动 main() 函数。在 main() 函数内部,初始化一个包含要排序的元素的二维整数数组。使用 for 循环和 fmt.Println() 函数在屏幕上打印数组。

  • 步骤 3 − 要排序元素,请使用 for 循环。for 循环用于遍历二维数组,并在每次迭代中将元素传递给 sort 包中的 Ints() 函数。

  • 步骤 4 − 一旦遍历了循环的每个元素,我们收到的结果数组将按列升序排序。现在,我们可以使用 fmt.Println() 函数在屏幕上打印这些数组的元素。

示例 1

在以下示例中,我们使用 sort.Ints() 在 Go 编程中按列排序二维数组

package main
import (
   "fmt"
   "sort"
)
func main() {
   // 2D array to sort
   arr := [][]int{{3, 2, 1}, {6, 4, 5}, {8, 9, 7}}
   var rows int = len(arr)
   var cols int = len(arr[0])
   fmt.Println("The given 2D array to be sorted is:")
   for i := 0; i < rows; i++ {
      for j := 0; j < cols; j++ {
         fmt.Print(arr[i][j], "\t")
      }
      fmt.Println()
   }
   // sorting the 2D array
   for i := 0; i < len(arr); i++ {
      sort.Ints(arr[i])
   }
   fmt.Println()
   // printing the sorted 2D array
   fmt.Println("The final sorted array is:")
   for i := 0; i < rows; i++ {
      for j := 0; j < cols; j++ {
         fmt.Print(arr[i][j], "\t")
      }
      fmt.Println()
   }
}

输出

The given 2D array to be sorted is:
3	2	1	
6	4	5	
8	9	7	

The final sorted array is:
1	2	3	
4	5	6	
7	8	9

示例 2

在此方法中,我们使用来自切片库函数的 sort.Slice() 函数按列元素对二维数组进行排序

package main
import (
   "fmt"
   "sort"
)

type byColumn [][]int

func (a byColumn) Len() int {
   return len(a)
}

func (a byColumn) Swap(i, j int) {
   a[i], a[j] = a[j], a[i]
}

func (a byColumn) Less(i, j int) bool {
   return a[i][0] < a[j][0]
}

func main() {
   arr := [][]int{{3, 2, 1}, {7, 9, 8}, {4, 6, 5}}
   var rows int = len(arr)
   var cols int = len(arr[0])
   fmt.Println("The given 2D array to be sorted is:")
   for i := 0; i < rows; i++ {
      for j := 0; j < cols; j++ {
         fmt.Print(arr[i][j], "\t")
      }
      fmt.Println()
   }
   sort.Sort(byColumn(arr))
   fmt.Println()
   fmt.Println("The given 2D array to be sorted is:")
   for i := 0; i < rows; i++ {
      for j := 0; j < cols; j++ {
         fmt.Print(arr[i][j], "\t")
      }
      fmt.Println()
   }
}

输出

The given 2D array to be sorted is:
3	2	1	
7	9	8	
4	6	5	

The given 2D array to be sorted is:
3	2	1	
4	6	5	
7	9	8

结论

我们已经成功编译并执行了一个 Go 语言程序,使用 main() 和内部库函数按列排序二维数组。

更新于:2023年2月16日

1K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告