怎么解释睡眠排序法

16次阅读

请输入图片描述

GeBron

最近这个算法很流行啊。

其实一开始是从shell脚本来的。

原理主要是利用多线程,把接受的每一个参数分别放在不同的线程里面并在每个线程同时使用sleep函数,sleep的时间就是参数的值,这样的话利用“数值大的参数的线程sleep的时间更长”这个事实,数字小的值就被先printf或者echo出来了,从而达到从小到大排序的目的。

不过这个方法有个致命的缺点,就是如果被排序的数字很大的话,花的时间也比较多。以你提供的代码为例,如果参数是3, 1, 10000的话,那么输出结果在第一秒会输出1,第三秒会输出3,但是要在10000秒时才能输出10000。为了提高速度可以按比例缩短时间,比如把sleep那句改成sleep(this/10000)。

不过还是挺2的,玩玩还可以。我觉得恶搞成分大于使用成分

Chris_Yue

没明白啥意思,是说用语言描述一下sleep sort么?
sleep sort的思路就是让大数字后输出。利用多线程和阻塞,把每一个输入的数字用一个线程输出:先阻塞该数字秒数时长,然后打印。
就是一个拿来玩的算法~~~
bash版的实现比较容易理解:

#!/bin/bash
function f() {
    sleep "$1"
    echo "$1"
}
while [ -n "$1" ]
do
    f "$1" &
    shift
done
wait

按照习惯,免费赠送一个Perl版的:

#!/usr/bin/perl
use Thread;

my @threads;

foreach my $n (@ARGV) {
	next unless defined $n;
	$threads[$count]=Thread->new(\&start_thread, $n);
	$count++;
}

foreach my $thread (@threads) {
	$thread->join();
}

sub start_thread{
	my ($num) = @_;
	sleep $num;
	print $num;
}

gaosboy

同意 @Chris Yue,这东东就是拿来恶搞的

波波

正文完