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() 和内部库函数按列排序二维数组。