Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kogan ([info]kogan)
@ 2015-10-21 23:07:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Цеховое: про связь науки с производством
Пару месяцев назад какая-то особенно длинная таблица стала как-то особенно медленно сортироваться. Полезли в код, а там пузырьковая сортировка с каких-то древних времен валяется. Фи, как некультурно, сказали мы и вставили стандартную сортировку Хоара (она же quick sort). И все с таблицей стало хорошо и быстро. Но вчера начали поступать жалобы с мест - что-то в некоторых других местах стало сортироваться не так, как прежде. И я, к стыду своему, не смог сообразить - какая, казалось бы, разница меж bubble и quick sort, помимо скорости?


А оказалось, что кое-кто у нас порой сортирует множества с равными элементами, а вот там-то разница есть: bubble стабильный, порядок равных элементов сохраняет, а quick переставляет их как попало.

Превращение quick sort в стабильную сортировку обошлось нам в одну дополнительную строчку, а друзьям по цеху предоставляется в качестве самостоятельного упражнения :-).


(Добавить комментарий)


[info]ronny_@lj
2015-10-21 17:17 (ссылка)
Да небось вместо меньше-равно поставили строго меньше. В общем, при равенстве не трогать.

(Ответить) (Ветвь дискуссии)


[info]kogan@lj
2015-10-21 17:31 (ссылка)
Почти так. Строго говоря, там надо что-то поставить вместо "равно" - и так, чтобы это вместо никого не двигало.

Если сформулировать задачу строже - я хочу воспользоваться библиотечной QuickSort без модификаций, но получить стабильную сортировку. Как?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ronny_@lj
2015-10-21 17:44 (ссылка)
Мсье понимает толк в извращениях! :)

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]_svetka_@lj
2015-10-21 18:05 (ссылка)
like! :)))))

(Ответить) (Уровень выше)


[info]kogan@lj
2015-10-21 18:23 (ссылка)
Ну дык что ж мне теперь - собственными руками что ли... QuickSort писать? Вот это уж будет как-то вовсе извращенно :-)

(Ответить) (Уровень выше)


[info]winpooh@lj
2015-10-21 19:25 (ссылка)
Добавить при равенстве элементов в качестве разрешающего правила порядок в исходном массиве.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]mopexod@lj
2015-10-22 02:08 (ссылка)
Да, по-моему совершенно стандартное решение. И, чтобы не заводить лишнего поля в структуре, сортировать массив индексов.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kogan@lj
2015-10-22 05:57 (ссылка)
Угу, так мы и сделали.

(Ответить) (Уровень выше)


[info]mopexod@lj
2015-10-22 02:20 (ссылка)
Для quick sort это не поможет. Она же не соседние элементы сравнивает, а далёкие.

(Ответить) (Уровень выше)