Go語言程式:陣列元素洗牌
陣列是元素的固定序列,其中元素放置在連續的記憶體位置。我們將對陣列的元素進行洗牌並隨機放置。在第一種情況下,我們將使用Fisher-Yates洗牌演算法。讓我們看看如何使用Go語言程式碼中不同的邏輯來執行它。
語法
rand.Seed(value)
Rand.Seed()函式用於生成隨機數。它接受使用者輸入作為引數,該引數是生成隨機數的上限。
func Now() Time
Now()函式定義在time包中。此函式生成當前本地時間。要使用此函式,我們必須首先在程式中匯入time包。
func (t Time) UnixNano() int64
UnixNano()函式定義在time包中。此函式用於獲取自1970年1月1日UTC以來經過的秒數。它返回的最終結果是64位的整數型別。
rand.Intn(n)
Intn()函式定義在math/rand包中。它用於生成區間[0, n]內的隨機數,其中n是使用者提供的數字。如果提供的數字小於0,則該函式會丟擲錯誤。
演算法
步驟1 - 建立一個package main並宣告fmt(格式化包)、time和math/rand包
步驟2 - 在main函式中建立一個數組
步驟3 - 使用內部/使用者定義的函式來建立隨機數
步驟4 - 使用使用者定義的函式開始洗牌過程。
步驟5 - 列印洗牌後陣列的輸出
示例1
在這個例子中,我們將學習如何使用Fisher-Yates洗牌演算法來洗牌陣列的元素。
package main
import (
"fmt"
"math/rand" //import fmt and math/rand
)
//create main function to execute the program
func main() {
array := []int{10, 20, 30, 40, 50, 60, 70, 80} //create an array which is to shuffled
fmt.Println("The elements of array are:", array)
shuffle(array) //call the function shuffle
fmt.Println("The shuffled array given here is:")
fmt.Println(array)
}
// shuffle shuffles the elements of an array in place
func shuffle(array []int) {
for i := range array { //run the loop till the range of array
j := rand.Intn(i + 1) //choose any random number
array[i], array[j] = array[j], array[i] //swap the random element with current element
}
}
輸出
The elements of array are: [10 20 30 40 50 60 70 80] The shuffled array given here is: [60 50 30 70 80 10 40 20]
示例2
在這個例子中,我們將使用rand.Seed函式來洗牌陣列的元素。
package main
import (
"fmt"
"math/rand" //import fmt, math/rand and time
"time"
)
//create main function to execute the program
func main() {
array := []int{10, 20, 30, 40, 50, 60} //create an array which is to shuffled
fmt.Println("The elements of array are:", array)
rand.Seed(time.Now().UnixNano()) // generate random numbers using this function
shuffle(array)
fmt.Println("The shuffled array is:")
fmt.Println(array)
}
func shuffle(array []int) {
for i := len(array) - 1; i > 0; i-- { //run the loop from the end till the start
j := rand.Intn(i + 1)
array[i], array[j] = array[j], array[i] //swap the random element with the current element
}
}
輸出
The elements of array are: [10 20 30 40 50 60] The shuffled array is: [10 30 60 50 20 40]
結論
我們使用兩組示例執行了這個陣列洗牌程式。在第一個示例中,我們使用了Fisher-Yates演算法,在第二個示例中,我們使用了rand.Seed函式。我們使用不同的邏輯對陣列進行了洗牌。因此,程式成功執行。
廣告
資料結構
網路
關係型資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP