Блог → Программирование

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

16 января 2013 01:45 

Комментариев нет


Ваше имя Сайт или блог (опционально) Аватар (опционально, e-mail для Gravatar или ссылка на картинку с ipic.su) Текст комментария

Справка по написанию комментария

  • Для вставки аватара зарегиструйтесь на сервисе Gravatar и укажите ваш e-mail. Вы также можете загрузить аватар на http://ipic.su и скопировать текст с поля «прямая ссылка». Другие сервисы или хостинги изображений не поддерживаются. Большие изображения будут уменьшены автоматически. Пример:

    http://ipic.su/img/img7/fs/user4.1358962896.png
  • Имя, адрес и аватар сохраняются, второй раз вводить не придётся
  • Кликните на аватар, чтобы вставить имя пользователя
  • Слово обрамлённое «звёздочками» становится *жирным*
  • Адрес ссылки автоматически становится ссылкой — http://anothersite.ru
  • Ссылки на текст с http://pastebin.com автоматически разворачиваются в тексте комментария
  • Цитату следует начинать со знака «больше»:
    > пример многострочной
    > цитаты