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() 和內部庫函式按列排序二維陣列。
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP