Golang程序 对2D数组进行跨列排序

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程