猴子排序引用了无限猴子定理:即一只猴子随机不停的敲击键盘,如果时间足够长,那么它总有可能会打出特定的文本,比如莎士比亚全集?
不断的交换数组位置,直到数组有序
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++ } } }