严肃一点的排序算法(1) – 睡眠排序

998次阅读
没有评论

朋友偶然给我发了一个截图,,,WTF??!

严肃一点的排序算法(1)

起初看了一脸懵逼,这算哪门子排序算法?百度走一朝才找到是睡眠排序。

原理很简单,就是通过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);
}
严肃一点的排序算法(1)
输出结果

afirefish
版权声明:本站原创文章,由afirefish2019-01-04发表,共计529字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...