Как стать автором
Обновить

Алгоритм сортировки quadsort

Время на прочтение11 мин
Количество просмотров9.4K

Вступление


Эта статья описывает стабильный нерекурсивный адаптивный алгоритм сортировки слиянием под названием quadsort.

Четверной обмен


В основе quadsort лежит четверной обмен. Традиционно большинство алгоритмов сортировки разработаны на основе бинарного обмена, где две переменные сортируются с помощью третьей временной переменной. Обычно это выглядит следующим образом:

    if (val[0] > val[1])
    {
        tmp[0] = val[0];
        val[0] = val[1];
        val[1] = tmp[0];
    }

В четверном обмене происходит сортировка с помощью четырёх подменных переменных (своп). На первом этапе четыре переменные частично сортируются в четыре своп-переменные, на втором этапе они полностью сортируются обратно в четыре исходные переменные.


Этот процесс показан на диаграмме выше.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии2

Как разложить фото, видео по папкам, исходя из их дат, используя python

Время на прочтение2 мин
Количество просмотров10K


Всем знакомы завалы из фото и видео, кои покоятся годами после копирования с устройств.

Особенно это характерно для iphone,ipad, которые при прямом копировании (без itunes) создают
залежи медиаконтента. Как это все разложить по годам-месяцам?

Да, есть синхронизация, да, можно сразу все сортировать. Но…

Кто-то предпочитает ничего не трогать, так как соблюдается единство свалки, кто-то делает робкие попытки разложить все накопленное хотя бы по годам.
Читать дальше →
Всего голосов 8: ↑6 и ↓2+4
Комментарии18

Нестабильная сортировка в JavaScript

Время на прочтение3 мин
Количество просмотров5.3K

Когда я вижу пост на подобную тему в любой социальной сети, под ним почти всегда оказывается множество комментов вот такого типа:

Зачем это нужно знать, если есть встроенные методы сортировки?

Зачем изобретать велосипед заново?

Это нужно, чтобы пройти собеседование, объективно больше незачем это знать

В "любой движок javascript" работают не дураки, и уже сделали все как нужно

И сам я раньше считал так же, пока не пришел в одну из команд Ростелеком ИТ frontend-разработчиком. Вместе мы набрели на очень интересный кейс: нужно было создать виджет, который мог бы встраиваться в информационные системы всех наших макрорегиональных филиалов и упрощать работу операторов по подбору оптимального тарифа.

Сразу к делу

Как думаете, что произойдет после выполнения данного кода? ​

Читать далее
Всего голосов 20: ↑14 и ↓6+8
Комментарии29

PostgreSQL Antipatterns: убираем медленные и ненужные сортировки

Время на прочтение5 мин
Количество просмотров16K
«Просто так» результат SQL-запроса возвращает записи в том порядке, который наиболее удобен серверу СУБД. Но человек гораздо лучше воспринимает хоть как-то упорядоченные данные — это помогает быстро сравнивать соответствие различных датасетов.

Поэтому со временем у разработчика может выработаться рефлекс «Дай-ка я на всякий случай это вот отсортирую!» Конечно, иногда подобная сортировка бывает оправдана прикладными задачами, но обычно такой случай выглядит как в старом анекдоте:
Программист ставит себе на тумбочку перед сном два стакана. Один с водой — на случай, если захочет ночью пить. А второй пустой — на случай, если не захочет.
Давайте разбираться — когда сортировка в запросе точно не нужна и несет с собой потерю производительности, когда от нее можно относительно дешево избавиться, а когда сделать из нескольких — одну.

Читать дальше →
Всего голосов 29: ↑28 и ↓1+27
Комментарии14

Быстрая сортировка

Время на прочтение3 мин
Количество просмотров65K
Всем привет. Сегодня продолжаем серию статей, которые я написал специально к запуску курса «Алгоритмы и структуры данных» от OTUS. По ссылке вы сможете подробно узнать о курсе, а также бесплатно посмотреть запись Demo-урока по теме: «Три алгоритма поиска шаблона в тексте».



Введение


Сортировка массива является одной из первых серьезных задач, изучаемых в классическом курсе «Алгоритмы и структуры данных» дисциплины computer science. В связи с этим задачи на написание сортировок и соответствующие вопросы часто встречаются на собеседованиях на позиции стажера или junior разработчика.
Читать дальше →
Всего голосов 26: ↑16 и ↓10+6
Комментарии13

Решаем вопрос сортировки в JavaScript раз и навсегда

Время на прочтение9 мин
Количество просмотров41K

Многим JavaScript разработчикам доводилось сортировать данные на стороне клиента. К сожалению, существующие библиотеки имеют мелкие недостатки. Но эти недостатки складываются и ограничивают то как программисты думают о сортировке. Чтобы преодолеть эти ограничения, давайте рассмотрим сортировку в разных языках. Вооруженные этими знаниями, мы сможем выбрать наиболее удобный и строгий интерфейс.

Читать далее
Всего голосов 23: ↑19 и ↓4+15
Комментарии21

Вот это скорость! Как мы подружили наш UBA-модуль с ClickHouse и что из этого вышло

Время на прочтение11 мин
Количество просмотров4.5K
В прошлом году мы выпустили мажорную версию своего продукта Solar Dozor 7. В новую версию нашей DLP-системы вошел модуль продвинутого анализа поведения пользователей UBA. При его создании мы попробовали разные базы данных, но по совокупности критериев (о них скажем ниже) в итоге остановились на ClickHouse.

Освоить ClickHouse местами было непросто, многое стало для нас откровением, но главное преимущество этой СУБД затмевает все её недостатки. Как вы поняли из заголовка, речь о скорости. По этому параметру ClickHouse оставляет далеко позади традиционные коммерческие базы данных, которые мы в своих продуктах, в том числе в Solar Dozor, тоже используем.

В общем, если вы давно хотели, но никак не решались попробовать, изучите наш опыт, он может вам пригодиться.


Кадры из мультфильма «Турбо» (2013 год)
Читать дальше →
Всего голосов 14: ↑13 и ↓1+12
Комментарии12

Почему tar.xz-файлы, созданные с Python tar, оказались в 15 раз меньше, чем у macOS tar

Время на прочтение3 мин
Количество просмотров22K

Прим. перев.: это не совсем обычный перевод, потому что в его основе не отдельно взятая статья, а недавний случай со Stack Exchange, ставший главным хитом ресурса в этом месяце. Его автор задает вопрос, ответ на который можно отнести к базовым знаниям в области ИТ, но в то же время оказавшийся откровением для некоторых посетителей сайта.

Сжимая каталоги по ~1,3 ГБ, в каждом из которых по 1440 файлов JSON, я обнаружил 15-кратную разницу между размером архивов, сжатых с помощью tar на macOS или Raspbian 10 (Buster), и архивов, полученных при использовании библиотеки tarfile, встроенной в Python.

Читать далее
Всего голосов 80: ↑77 и ↓3+74
Комментарии24

Сортировка хабратопиков по популярности

Время на прочтение1 мин
Количество просмотров792
Предлагаю добавить возможность упорядочивать хабратопики по популярности.
Иногда хочется посмотреть не самые свежие, а самые интересные топики блогов.
Всего голосов 4: ↑4 и ↓0+4
Комментарии3

Облако — сортировка

Время на прочтение1 мин
Количество просмотров899
Хотел спросить… по какому критерию сортируюсть метки в облаке?
Считаю, что гораздо удобнее, привычнее было бы отсортировать их по алфавиту.
Люди которые постоянно следят за сайтом, а соответственно за изменениями в облаке уже привыкли видет его таким и запомнили в какой части облака находиться необходимая метка.
А вот новый человек теряеться( — чтоб найти ту метку, которая ему интересна, он должен пробежать по всему облаку, причем напрягаться, читая то мелкий то крупный шрифт.
Гораздно логичнее было бы разместить метки в алфавитном порядке, не правда ли?
Всего голосов 7: ↑6 и ↓1+5
Комментарии6

Ещё раз про сортировку

Время на прочтение11 мин
Количество просмотров35K
Прошлый топик, про оценку сложности алгоритмов был весьма положительно оценён хабрасообществом. Из этого я могу сделать вывод, что тема базовых алгоритмов весьма интересна. Сегодня я хочу представить вам часть, посвящённую алгоритмам сортировки. Про базовые алгоритмы писать для Хабра совсем несерьёзно, а вот про сортировки Шелла, пирамидальную и быструю рассказать всё-таки стоит. (Если кому-то интересно почитать про базовые методы, милости прошу сюда)
Читать дальше →
Всего голосов 51: ↑36 и ↓15+21
Комментарии39

Как работают алгоритмы сортировки

Время на прочтение1 мин
Количество просмотров22K
Иногда для понимания того, как работает та или иная вещь, лучше один раз увидеть, чем сто раз услышать.

Замечательный сайт www.sorting-algorithms.com позволяет увидеть, как сортируются данные разными алгоритмами. Вы сможете посмотреть анимацию в зависимости от алгоритма, исходных данных.



Все это бегает и сортируется прямо на ваших глазах!

Работает на Google App Engine, видимо, поэтому и лежит от посетителей с «Хабра».
Всего голосов 185: ↑151 и ↓34+117
Комментарии63

Сортировка массива за O(N) на CUDA

Время на прочтение5 мин
Количество просмотров15K
Введение
Как-то стояла задача отсортировать уникальный массив строк с использованием GPU с минимум кода и максимально возможной скоростью…
В данном посте опишу основную идею ее решения. В качестве элементов массива сортировки в данном посте выступают числа.
Случай с уникальными элементами небольшого массива
В качестве платформы была выбрана CUDA по причинам, которые можно считать брэндовыми или индвидуальными. По факту, здесь много примеров именно на CUDA, и она на данный момент получила большее развитие в GPU-вычислениях, чем аналогичные платформы от ATI и OpenCL.
Поиск в сети по алгоритмам сортировки на CUDA дал разные результаты. Вот наиболее интересный. Там есть рисунок
image
, из которого видно, что наилучший результат дал алгоритм QSORT, который дает сложность порядка от O(NlogN) до O(N^2). И хотя распараллеливание на GPU дало лучший в статье результат, закралось сомнение, что QSORT — не лучший способ использовать ресурсы видеокарты для данной задачи (особенно испугал размер приведенного кода). Далее описывается решение задачи, по сути «в одну строчку» с сложностью временной сложностью O(N) в худшем случае.

Читать дальше →
Всего голосов 53: ↑41 и ↓12+29
Комментарии56

Поиск k-ого наименьшего элемента

Время на прочтение3 мин
Количество просмотров35K
Сегодня на Хабре появилась очень интересная статья, о поиске минимального (максимального) значения на отрезке в массиве. Так как статья оказалось интересной и популярной, я решил с вами поделиться ещё одним алгоритмом поиска в массиве некоторых «специальных» значений.
Читать дальше →
Всего голосов 48: ↑43 и ↓5+38
Комментарии26

Таблицы Юнга в задачах поиска и сортировки

Время на прочтение6 мин
Количество просмотров7.1K
Таблицы Юнга являются широко известным (в узких кругах) типом объектов, изучаемых в комбинаторике и смежных науках: ссылка, ссылка, книжка. Ниже рассматривается применение частного вида таблиц Юнга применительно к таким стандартным алгоритмическим задачам, как поиск и сортировка. С этой точки зрения таблицы Юнга весьма близки пирамидам, собственно так они и позиционируются в учебнике Кормена и ко (упражнения в разделе, посвященном пирамидам).
Читать дальше →
Всего голосов 50: ↑50 и ↓0+50
Комментарии13

Двоичные таблицы Юнга

Время на прочтение7 мин
Количество просмотров3.2K
Итак, как и обещал, продолжение темы о таблицах Юнга. Напомню, что под таблицей Юнга понимается числовая матрица, обладающая некоторыми специальными свойствами. Матрица – это двумерный массив. И вот тут должен возникнуть естественный вопрос – а почему, собственно, массив должен быть двумерным? А что, если мы попробуем реализовать на тех же принципах таблицу размерности три, или четыре, а лучше всего, конечно, пять звездочек! О том, куда приведет нас такое обобщение, можно прочитать под катом…
Читать дальше →
Всего голосов 36: ↑34 и ↓2+32
Комментарии3

А бывает ли фонетическая сортировка?

Время на прочтение2 мин
Количество просмотров1.4K
Глядя сегодня в адресную книгу своего телефона на Андроиде, я понял, что мне неудобно смотреть на список моих контактов, отсортированный по порядку символов в UTF.

И захотелось мне странного.
Всего голосов 21: ↑18 и ↓3+15
Комментарии19

Сортировка вставкой в хэш-таблицу

Время на прочтение5 мин
Количество просмотров15K
Предлагаю вашему вниманию новый (как я думаю) алгоритм сортировки. Пытался искать похожее, но аналогов не увидел. Дайте знать, если видели что-то подобное.
Суть сортировки в том, что хэш-функция и разрешение коллизий построены таким образом, что в хэш-таблице данные оказываются уже в отсортированном виде. Остаётся только пробежаться по массиву хэш-таблицы и собрать непустые отсортированные данные.

Кому интересно – прошу под кат.

Читать дальше →
Всего голосов 20: ↑11 и ↓9+2
Комментарии19

Пузырьковая сортировка и все-все-все

Время на прочтение5 мин
Количество просмотров614K

Все отлично знают, что из класса обменных сортировок самый быстрый метод – это так называемая быстрая сортировка. О ней пишут диссертации, её посвящено немало статей на Хабре, на её основе придумывают сложные гибридные алгоритмы. Но сегодня речь пойдёт не про quick sort, а про другой обменный способ – старую добрую пузырьковую сортировку и её улучшения, модификации, мутации и разновидности.

Практический выхлоп от данных методов не ахти какой и многие хабрапользователи всё это проходили ещё в первом классе. Поэтому статья адресована тем, кто только-только заинтересовался теорией алгоритмов и делает в этом направлении первые шаги.

image: пузырьки

Сделать первый шаг в изучении сортировок
Всего голосов 116: ↑104 и ↓12+92
Комментарии35

Глупая сортировка и некоторые другие, поумнее

Время на прочтение4 мин
Количество просмотров98K

В прошлой статье мы оттолкнулись от так называемой глупой сортировки и путём нехитрых метаморфоз получили всем известную пузырьковую сортировку. Трансформируя последнюю пришли к целому вороху обменных способов упорядочивания массивов. Один из которых, между прочим, на структурах до нескольких тысяч элементов, даже работает быстрее чем быстрая сортировка.

Сегодня мы снова возьмём за основу stupid sort и внесём в неё другое маленькое, но существенное изменение. В результате получим совершенного другой эволюционный ряд сортировочных алгоритмов.

image: эволюция

Другое ответвление глупой сортировки
Всего голосов 69: ↑62 и ↓7+55
Комментарии23