Sleepsort
Читал на «хабре» про алгоритм sleepsort и благополучно забыл про него. Сегодня решил посмотреть, как его можно реализовать на C#.
Первой идеей было использовать Parallel.ForEach, но, как выяснилось, количество активных потоков в нём регулируется количеством ядер процессора и фазой Луны — стартуют они не одновременно, а ждут завершения предыдущих. Поэтому сделал через Thread:
using System;
using System.Threading;
class SleepSort
{
static void ThreadWorker(object number)
{
Thread.Sleep(100 * (int)number);
Console.WriteLine(number);
}
static public void Sort(int[] numbers)
{
foreach (int number in numbers)
{
new Thread(ThreadWorker).Start(number);
}
}
}
class Program
{
static void Main()
{
SleepSort.Sort(new int[] { 7, 9, 8, 10, 6, 5, 1, 3, 2, 4 });
Console.ReadKey(true);
}
}
Умножение на 100 при задержке сделано неспроста — точности при отдельных миллисекундах не получается и потоки начинают завершаться в абы каком порядке. Конечно, практического применения у алгоритма нет, но выгядит весело =)
Комментариев нет