算法:golang实现佛系排序

猴子排序引用了无限猴子定理:即一只猴子随机不停的敲击键盘,如果时间足够长,那么它总有可能会打出特定的文本,比如莎士比亚全集?

不断的交换数组位置,直到数组有序

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++
		}
	}


}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值