|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||
Сортировка вставками в односвязном списке20.09.2011, 14:18. Показов 17853. Ответов 24
Метки нет (Все метки)
Собственно нужно реализовать такую сортировку, но что-то не могу я придумать как её реализовать именно в односвязном списке, у нас ведь доступ не прямой как у массива здесь ... есть варианты?
Собственно код моего односвязного списка (большим количеством места отделены функции которые вряд-ли понадобятся для сортировки, я их просто оставил для целостности, main в коде тоже оставлен с той же целью):
0
|
||||||
| 20.09.2011, 14:18 | |
|
Ответы с готовыми решениями:
24
Ошибка в односвязном списке Ошибка в односвязном списке |
|
|
||||||||||||||||
| 20.09.2011, 15:59 | ||||||||||||||||
|
Gepar, единственное, что я вижу - это ресурсоёмкий оператор индексации, который будет выполнять поиск нужного элемента, начиная с головы.
Хотя, если можете - сделайте список двусвязным. Добавлено через 6 минут
Gepar, если с двусвязным списком, то вот мои эксперементы. Также советую сделать у себя итераторы:
Вот так же с stl-совместимым двунаправленным итератором
В любом случае, даже в однонаправленном списке можно реализовать сортировку вставками при помощи operator[].
0
|
||||||||||||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 20.09.2011, 16:40 [ТС] | |
|
Ну добавлять индексацию в однонаправленный список это как-то нецелесообразно что-ли. А какая сортировка лучше всего подойдёт для односвязного списка?
0
|
|
|
|
|||||||
| 20.09.2011, 17:36 | |||||||
1
|
|||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||
| 20.09.2011, 19:49 [ТС] | ||
|
0
|
||
|
|
||||||
| 20.09.2011, 20:28 | ||||||
1
|
||||||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||
| 21.09.2011, 00:22 [ТС] | ||
|
talis, спасибо, попробую.
Добавлено через 2 часа 57 минут
0
|
||
|
|
|
| 21.09.2011, 00:34 | |
|
Gepar, чтобы можно было критерии сортировки указывать при вызове без необходимости модифицировать код класса. Почитайте про стандартные алгоритмы stl, вроде count_if, find_if, for_each, sort и так далее. Там так сделано.
0
|
|
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|
| 21.09.2011, 15:08 [ТС] | |
|
talis, сегодня уже дошла причина применения такого метода.
0
|
|
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
||||||||||||||||
| 02.10.2011, 12:44 [ТС] | ||||||||||||||||
|
Подниму вновь тему так как что-то не могу разобраться с сортировкой для своего односвязного списка, запутываюсь я что-то в указателях при сортировке и всё тут.
Список и указатели на Head и Tail:
Помогите пожалуйста.
0
|
||||||||||||||||
|
|
|
| 02.10.2011, 13:40 | |
|
Gepar, давайте рассуждать логически. Допустим, есть элементы A, B, C и D. Чтобы поменять B и C, нужно изменить три указателя, а не два:
Соответственно, нужно знать адрес элемента, предшествующего B. Кроме того, нужно рассматривать случаи, когда B - это первый элемент, а С - последний. Или, вот, другой случай: То есть, в любом случае нужно знать адрес предыдущего элемента.
1
|
|
|
|
||
| 02.10.2011, 13:44 | ||
|
Посмотрите, как работает std::swap:
http://www.cplusplus.com/reference/algorithm/swap/ Меняются местами именно информативные части. Добавлено через 1 минуту А, нет, я не прав:
1
|
||
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||||||
| 02.10.2011, 16:22 [ТС] | |||||||
|
Можно в принципе хранить адрес ещё и предыдущего предыдущему элементу но такой алгоритм учитывающий всё у меня что-то тоже не получается ... Добавлено через 2 часа 26 минут Вроде написал какую-то сортировку, не знаю только как её назвать, я пока её называю "работающая сортировка" ![]()
0
|
|||||||
|
0 / 0 / 0
Регистрация: 24.11.2012
Сообщений: 12
|
|
| 05.12.2013, 16:04 | |
|
Здравствуйте, у меня несколько вопросов методического плана)
Читаю книгу Седжвика "Алгоритмы в Java" и решаю все задачи на С++. Дошел до главы "Сортировка", реализовал сортировку Шелла, выбором, связную и быструю сортировку статических массивов. Результаты совпали с книжными: самым быстрым способом оказалась Быстрая сортировка. Также реализовал все эти способы сортировки для односвязных списков. Как и ожидалось сортировка односвязного списка происходит гораздо медленнее, чем сортировка статического массива: "Быстрая" сортировка 1 млн целых чисел в виде обычного массива заняла 143 мС, а в виде односвязного списка - почти 10 секунд. Тут и появился вопрос: выполняется ли на практике сортировка односвязных списков? Как мне кажется - гораздо производительнее будет односвязный список скопировать в обычный массив, произвести в нем сортировку и скопировать обратно в список. Прав ли я? Спасибо)
0
|
|
|
1186 / 543 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
|
|||
| 06.12.2013, 15:02 [ТС] | |||
|
0
|
|||
|
|
|
| 06.12.2013, 15:22 | |
|
Для списков даже обычная сортировка вставками должна быть гораздо быстрее
Добавлено через 2 минуты А сортировка слияниями для списков должна быть абсолютно незатратна по памяси, в отличие от массивов
0
|
|
| 06.12.2013, 15:22 | |
|
Помогаю со студенческими работами здесь
20
Поиск в односвязном списке Remove_at() в односвязном списке
Ошибка в односвязном списке Удаление чисел в односвязном списке Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|