两种有趣的排序方法:睡眠排序、猴子排序(golang版本)

本文介绍了两种非传统排序算法:睡眠排序和猴子排序。睡眠排序利用协程沉睡时间实现排序,但存在数字过大导致长时间等待和启动时间不一致的问题。猴子排序基于概率论,通过随机交换数组元素期望达到有序状态,适用于小规模数组,时间复杂度高。这两种算法更多是理论探讨,实际应用中需谨慎。
摘要由CSDN通过智能技术生成

前几天看到一个博主翻译的一个算法,叫睡眠排序,原文链接:https://blog.csdn.net/zmazon/article/details/8514088

感觉这个算法十分有趣,在网上搜集了一些资料看一下都有什么脑洞大开的排序算法。

一:睡眠排序

原理:这个算法的核心思想就是对应多少个待排序的数字,就开多少个协程,让每个协程沉睡对应的数字时长(这里我让每个协程沉睡ms级别),沉睡之后打印对应数字,这样数字小的当然就先打印了,数字大的就后打印了,实现了排序功能。

代码如下:

package main

import (
	"fmt"
	"time"
)

func main() {
	arr := []int{4, 3, 6, 8, 1, 5, 2, 9, 7, 34, 32, 53, 3}
	n := len(arr)
	ch := make(chan int, n) //用一个channel记录,防止主进程在有的协程还没有结束任务的时候就退出
	for i := 0; i < n; i++ {
		go func(t int) {
			time.Sleep(time.Millisecond * time.Duration(t)) //沉睡对应的arr[i]ms
			fmt.Println(t)	//打印出来
			ch <- i //协程打印数字之后传一个变量到channel
		}(arr[i])
	}
	for i := 0; i < n; i++ {//等待所有的协程工作完毕
		<- ch
	}
	return
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值