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 при задержке сделано неспроста — точности при отдельных миллисекундах не получается и потоки начинают завершаться в абы каком порядке. Конечно, практического применения у алгоритма нет, но выгядит весело =)
Комментариев нет