[Ответить в тред] Ответить в тред

03/04/16 - Набор в модераторы 03.04 по 8.04
26/03/16 - Конкурс: Помоги гомункулу обрести семью!
15/10/15 - Набор в модераторы 15.10 по 17.10



[Назад][Обновить тред][Вниз][Каталог] [ Автообновление ] 18 | 1 | 6
Назад Вниз Каталог Обновить

Ребят, создаю тред про Аноним 07/06/16 Втр 19:30:16  763831  
14653170170680.jpg (37Кб, 807x687)
Ребят, создаю тред про быструю сортировку. Смотрите. Я понял в алгоритме вот такое: идём по массиву до опорного элемента и сравниваем каждый элемент слева и справа с опорным, Если элемент слева меньше или равен опорному - идём дальше и до тех пор, пока не найдём элемент, который больше опорного. Тоже самое справа. идём к опорному, пока не найдём элемент, который меньше опорного. Если с двух сторон такие нашли - свопаем их. Вот. И вот так идти, пока эти два указателя не пересекутся. Ок. теперь передаём в эту же саму функцию те части массива, которые слева и справа от опорного и повторяем всё.

Допустим массив из трёх элементов 4 1 3.
слева элемент больше чем опорный. значит тут указатель слева останавливается. справа элемент больше опорного, значит этот указатель декрементируем и встаёт он на опорном. свопаем 4 и 1. дальше оба указателя перегоняют друг друга и тут цикл завершён. я не понимаю ребят. получилось 1 4 3. Не отсортирован. Как дальше то? Объясните мне чего я не так понимаю в алгоритме.
Аноним 07/06/16 Втр 19:42:40  763844
>>763831 (OP)
>4 1 3
На подмассивах длинной меньше шести используется пузырек.
Аноним 07/06/16 Втр 20:22:43  763894
>>763844
В алгоритме нет такого.
Аноним 07/06/16 Втр 20:35:55  763906
>>763894
Алгоритм != практическая реализация.
>>763844
Обычно еще лучше - quicksort с лимитом на глубину рекурсии, а дальше переключение на heapsort.
Аноним 07/06/16 Втр 20:37:39  763908
>>763906
Ну погоди. Я не понимаю. Это реально чтоль так работает? Как-то тупо
Аноним 07/06/16 Втр 20:43:15  763917
>>763908
А как ты хотел, чтобы там rocket science был? Фактически сейчас рулят два алгоритма с вариациями - introsort (эта та смесь quicksort и heapsort) и timsort (ее в пистоне прикрутили, она теоретически еще быстрее, но там свои проблемы есть, например, уже находили некорректно сортируемые наборы).
Аноним 07/06/16 Втр 20:47:35  763922
>>763917
Понимаешь, я её должен реализовать не для того, чтобы в каком-то проекте юзать, в котором сортировки надо делать, на каком-то этапе работы, а для того, чтобы придти так мягонько и преподу показать, что вот я сделал. И я не понимаю как вообще алгоритм потенциально может работать с массивом из трёх. Я вот не видел нигде предупреждения о том, что этот алгоритм не применим для такого вот массива.
Аноним 07/06/16 Втр 20:50:44  763924
>>763922
Он может же. На любой итерации ты получаешь один центральный элемент + еще два массива (возможно, пустых), к которым применяешь рекурсивно. Если тебе пришел пустой массив или массив из одного элемента, то ты просто сразу возвращаешь его. Вот и все.
Аноним 07/06/16 Втр 21:01:04  763936
>>763924
в примере, который я приводил в конце осталось 1 4 3. в центре стоит 4, слева и справа массивы 1 и 3. как я переставлю центральный и правый местами? не ну если бы я мог передать этот подмассив вместе с опорным элементом, тогда я мог бы переставить .а так я как это сдлеаю? я не понимаю вот этого вот. объясни пожалуйсьа.
Аноним 07/06/16 Втр 21:07:21  763941
>>763936
блять, тебя учили пользоваться дебагером? Зайди в вижлу, копирни код сортировки и дай ей на вход массив, а потом дебагером походи, сразу увидишь всё сам.
Аноним 07/06/16 Втр 21:07:53  763943
>>763941
>вижлу
В свою иде
самофикс
Аноним 07/06/16 Втр 21:09:08  763946
>>763936
>слева и справа массивы 1 и 3
"лево и право" это больше-меньше опорного.
В твоем случае это " " и "4 3".
Аноним 07/06/16 Втр 21:12:28  763952
>>763941
смотри. ща.
https://habrahabr.ru/sandbox/29775/
вот тут реализация вот такая. я так понял тут почан передаёт подмассив вместе с опорным элементом на обработку. т.е. в примере как у меня, в его реализации, будет на один больше рекурсивных вызовов. но это же не по алгоритму так передавать вместе с опорным элементом, не? я вот и запутался. с другого сайта брал реализацию, так там вообще пинцет массив не отсортировался как надо.
Аноним 07/06/16 Втр 21:13:07  763954
>>763946
опорный же задаётся индексом, а не значением, не?
Аноним 07/06/16 Втр 21:14:46  763957
>>763952
>с другого сайта брал реализацию
Там проебали равенство, Люк.
Аноним 07/06/16 Втр 21:18:06  763964
>>763957
всмысле?
(зачем ты сажей льёшь? мне ведь не помогли даже ещё)

дайте реализацию на си, которая по вашему мнению правильная хоть.
Аноним 07/06/16 Втр 22:11:46  764029
>>763954
Какое это имеет значение?
Для следующей итерации он не нужен. Нужны две пары индексов левый мин-макс и правый мин-макс индексы.
Они сразу есть и равны i, j после выхода из основного цикла по while(i<=j).

САЖА
Аноним 08/06/16 Срд 12:55:14  764471
>>763831 (OP)
"Алгоритмы построение и анализ" именно с этого же и начинается, разве нет?
Аноним 09/06/16 Чтв 04:46:46  765226
Тут дело в том, как считать границы массива. Имеем массив 4 1 3, передаём его в функцию сортировки. Получаем 1 4 3. Передаём части массива дальше - левая часть 1 4, правая 4 3. После этого правая часть отсортировывается до 3 4, и весь массив выглядит как 1 3 4 (потому что мы передаём индексы, а не делим массив физически), и части массива передаются дальше. Левая-левая часть 1, левая-правая часть 3, правая-левая часть 3, правая-правая часть 4. Один элемент всегда отсортирован, поэтому все ветви завершаются.

[Назад][Обновить тред][Вверх][Каталог] [Реквест разбана] [Подписаться на тред] [ ] 18 | 1 | 6
Назад Вверх Каталог Обновить

Топ тредов