猴子排序引用了无限猴子定理:即一只猴子随机不停的敲击键盘,如果时间足够长,那么它总有可能会打出特定的文本,比如莎士比亚全集?
不断的交换数组位置,直到数组有序
package main
import (
"fmt"
"math/rand"
"time"
)
func isOrder(arr []int) bool {
length := len(arr)
for i := 1; i < length; i++{
if arr[i] < arr[i - 1]{
return false
}
}
return true
}
func randSort(arr []int) {
rand.Seed(time.Now().Unix())
// 将索引打乱
indexs := rand.Perm(len(arr))
// 交换位置
for i, i2 := range indexs {
arr[i], arr[i2] = arr[i2], arr[i]
}
}
func randSort1(arr []int) {
data:=make([]int,len(arr))//新建一个数组
copy(data,arr)//拷贝数组
rand.Seed(time.Now().Unix())
indexs := rand.Perm(len(arr)) // 将索引打乱
// 交换位置
for i, i2 := range indexs {
arr[i] = data[i2]
}
}
func main() {
arr := []int{3, 66, 4, 9, 10}
count := 0
for {
if isOrder(arr){
fmt.Println("有序了,一共排序了", arr, count)
break
}else{
randSort1(arr)
count++
}
}
}