朋友偶然给我发了一个截图,,,WTF??!
起初看了一脸懵逼,这算哪门子排序算法?百度走一朝才找到是睡眠排序。
原理很简单,就是通过CPU调度来实现的。数组里面每个元素都创建一个线程,然后让线程休眠排序元素值的时间,最后输出结果。
知道原理了之后很容易就能想到这个排序算法的缺陷:效率不高,不能为负数(应该说是完全没有效率可言)。如果有超过10w个元素,而且其中有很大的数据,那排完序得何年何月。而且数组越大,产生的误差越大。
当然,这么有趣的算法,怎么也得实践一下。为了避免产生误差,我对序列中每个元素线程的休眠时间放大了10倍,并且加上了10ms的输出时间。
static void Main(string[] args)
{
int[] nums = new[] { 1, 4, 7, 20, 14, 30, 124, 45 };
for (int i = 0; i < nums.Length; i++)
{
NumSleep(nums[i]);
}
Console.ReadKey(false);
}
static async void NumSleep(int temp)
{
await Task.Run(() =>
{
Thread.Sleep((temp * 10) + 10);
});
Console.WriteLine(temp);
}
文章评论