Golang程序 对2D数组进行跨列排序
什么是Golang中的二维数组?
在Go编程语言中,2D数组是一个数组的数组,其中外层数组的每个元素本身就是一个简单的数组。声明一个大小为2 X 3的二维数组的代码可以通过写var array [2
][3]来完成。需要注意的是,2D数组有一个固定的大小,一旦创建,其大小就不能改变。如果你需要一个动态的二维数组,你可以使用分片的方式。
下面是一个对二维数组进行跨列排序的例子 –
输入
3 2 1
6 4 5
8 9 7
输出
1 2 3
4 5 6
7 8 9
方法1:使用For循环
在这个方法中,我们将在golang程序中使用 “for “循环,这将有助于我们对二维数组进行跨列排序。
算法
- 第1步 – 首先,我们需要导入fmt包。
-
第2步 – 然后,启动main()函数。在main()函数中,初始化一个具有待排序元素的二维整数阵列。使用for循环和fmt.Println()函数在屏幕上打印该数组。
-
第3步– 为了对元素进行排序,在彼此之间使用三个for循环。前两个for循环用于遍历二维数组,而第三个for循环用于选择循环中的特定元素,并将其置于相应的位置。
-
第4步 – 如果数组中的当前元素大于下一个元素,那么我们需要切换元素的位置,否则我们必须继续进行循环。
-
第5步 – 一旦循环中的每个元素被迭代,我们收到的结果数组将按升序排序。我们可以使用fmt.Println()函数在屏幕上打印这些数组的元素。
例子
下面是一个Golang程序,使用 “for “循环对一个2D数组进行跨列排序
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()函数中,初始化一个2D的整数数组,其中有要排序的元素。使用for循环和fmt.Println()函数在屏幕上打印该数组。
-
第3步 – 使用for循环对元素进行排序。for循环用于在二维数组上进行迭代,并在每次迭代时将元素传递给排序包中的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
在这个方法中,我们使用slice库中的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()和内部库函数对二维数组进行跨列排序。